Implements rudimentary thread-safety for EventBus and Logger classes.

This commit is contained in:
Sven Luethi committed 2021-04-01 00:17:38 +02:00
1 parent 34e1dd0c33
commit fb35fbd350
6 files changed
+66 -31

No files matched your search

+14 -6
View File
@@ -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() {