diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-12-10 10:35:25 +0100 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2018-01-13 03:39:33 +0100 |
commit | ee814eede9b65fb469c12a3effc432e38a33442d (patch) | |
tree | 14bacdf6536944d207969b1ce9f27b68f6479b86 /src/Event.cpp | |
parent | Disabled VSync (diff) | |
download | AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar.gz AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar.bz2 AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar.lz AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar.xz AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.tar.zst AltCraft-ee814eede9b65fb469c12a3effc432e38a33442d.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Event.cpp | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/src/Event.cpp b/src/Event.cpp index 1f3a9e8..00f67c0 100644 --- a/src/Event.cpp +++ b/src/Event.cpp @@ -1,131 +1 @@ #include "Event.hpp" - -#include <easylogging++.h> - -#include "Utility.hpp" - -std::queue<Event> EventAgregator::eventsToHandle; -std::mutex EventAgregator::queueMutex; -bool EventAgregator::isStarted = false; -std::vector<EventListener *> EventAgregator::listeners; -std::mutex EventAgregator::listenersMutex; - -EventListener::EventListener() { - EventAgregator::RegisterListener(*this); -} - -EventListener::~EventListener() { - EventAgregator::UnregisterListener(*this); -} - -void EventListener::PushEvent(Event event) { - eventsMutex.lock(); - handlersMutex.lock(); - if (handlers[event.type]) { - events.push(event); - } - handlersMutex.unlock(); - eventsMutex.unlock(); -} - -void EventListener::DirectCall(Event event) -{ - handlersMutex.lock(); - if (handlers[event.type]) - handlers[event.type](event.data); - handlersMutex.unlock(); -} - -bool EventListener::IsEventsQueueIsNotEmpty() { - eventsMutex.lock(); - bool value = !events.empty(); - eventsMutex.unlock(); - return value; -} - - -void EventListener::RegisterHandler(EventType type, EventListener::HandlerFunc handler) { - handlersMutex.lock(); - handlers[type] = handler; - handlersMutex.unlock(); -} - -void EventListener::HandleEvent() { - eventsMutex.lock(); - if (events.empty()) { - eventsMutex.unlock(); - return; - } - Event event = events.front(); - events.pop(); - eventsMutex.unlock(); - handlersMutex.lock(); - auto function = handlers[event.type]; - handlersMutex.unlock(); - function(event.data); -} - - -void EventAgregator::RegisterListener(EventListener &listener) { - listenersMutex.lock(); - //LOG(WARNING) << "Registered handler " << &listener; - listeners.push_back(&listener); - listenersMutex.unlock(); -} - -void EventAgregator::UnregisterListener(EventListener &listener) { - listenersMutex.lock(); - //LOG(WARNING) << "Unregistered handler " << &listener; - listeners.erase(std::find(listeners.begin(), listeners.end(), &listener)); - listenersMutex.unlock(); -} - -void EventAgregator::PushEvent(EventType type, EventData data) { - Event event; - event.type = type; - event.data = data; - queueMutex.lock(); - eventsToHandle.push(event); - queueMutex.unlock(); - if (!isStarted) { - isStarted = true; - std::thread(&EventAgregator::EventHandlingLoop).detach(); - } -} - -void EventAgregator::DirectEventCall(EventType type, EventData data) -{ - Event event {type, data}; - listenersMutex.lock(); - for (auto &listener : listeners) { - listenersMutex.unlock(); - listener->DirectCall(event); - listenersMutex.lock(); - } - listenersMutex.unlock(); -} - -void EventAgregator::EventHandlingLoop() { - LoopExecutionTimeController timer(std::chrono::milliseconds(5)); - while (true) { - queueMutex.lock(); - if (!eventsToHandle.empty()) { - auto queue = std::move(eventsToHandle); - queueMutex.unlock(); - - while (!queue.empty()) { - auto event = queue.front(); - listenersMutex.lock(); - for (auto &listener : listeners) { - listener->PushEvent(event); - } - listenersMutex.unlock(); - queue.pop(); - } - - queueMutex.lock(); - } - queueMutex.unlock(); - timer.Update(); - } -}
\ No newline at end of file |