Implements rudimentary thread-safety for EventBus and Logger classes.
This commit is contained in:
1 parent
34e1dd0c33
commit
fb35fbd350
6 files changed
+66
-31
No files matched your search
+14
-6
@@ -5,21 +5,28 @@ namespace Core {
|
||||
|
||||
// ============================== EventBus Class ==============================
|
||||
|
||||
EventBus::EventBus(Logger& logger) : _logger(logger) {
|
||||
EventBus::EventBus(Logger& logger) :
|
||||
_logger(logger)
|
||||
{
|
||||
_logger.debug.ln ("Starting Event Bus...");
|
||||
_thread = thread(&EventBus::run, this);
|
||||
_logger.debug.ln ("Event Bus Started");
|
||||
}
|
||||
|
||||
EventBus::~EventBus() {
|
||||
_logger.debug.ln ("Stopping Event Bus...");
|
||||
_thread.join();
|
||||
// destroy all events in _events vector
|
||||
_logger.debug.ln ("EventBus has been shut down.");
|
||||
for (auto event : _events) { delete event; }
|
||||
_logger.debug.ln ("Event Bus stopped");
|
||||
}
|
||||
|
||||
Event& EventBus::registerEvent(const string& eventID) {
|
||||
_mutex.lock();
|
||||
for ( const auto event : _events ) {
|
||||
if (event->getID() == eventID) {
|
||||
_logger.debug << "Event '" << eventID << "' found" << Logger::commit;
|
||||
_mutex.unlock();
|
||||
return *event;
|
||||
}
|
||||
}
|
||||
@@ -27,27 +34,28 @@ Event& EventBus::registerEvent(const string& eventID) {
|
||||
_logger.debug << "Registering new Event '" << eventID << "'" << Logger::commit;
|
||||
Event* event = new Event(eventID);
|
||||
_events.push_back(event);
|
||||
_mutex.unlock();
|
||||
return *event;
|
||||
}
|
||||
|
||||
void EventBus::run() {
|
||||
_logger.warn.ln("Hi from EventBus run method! From within Event Thread! Dont forget to make Logger class thread-safe!");
|
||||
_logger.warn.ln("Hi from EventBus run method, from within Event Thread!");
|
||||
}
|
||||
|
||||
// =============================== Event Class ================================
|
||||
|
||||
Event::Event(const string id) : _id(id) {}
|
||||
|
||||
Event::~Event() {
|
||||
|
||||
}
|
||||
Event::~Event() {}
|
||||
|
||||
const string& Event::getID() const {
|
||||
return _id;
|
||||
};
|
||||
|
||||
void Event::subscribe(EventSubscriber* es) {
|
||||
_mutex.lock();
|
||||
_subscribers.push_back(es);
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
void Event::fire() {
|
||||
|
||||
Reference in new issue
Block a user