diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-07-29 16:55:16 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-07-29 16:55:16 +0200 |
commit | f942405184c2d6067fb5303b58a225edf7e452b1 (patch) | |
tree | 83e70c7e3019e5b195c9caf41194b2113fa76d7f /src/core/Event.hpp | |
parent | 2017-07-26 (diff) | |
download | AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar.gz AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar.bz2 AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar.lz AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar.xz AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.tar.zst AltCraft-f942405184c2d6067fb5303b58a225edf7e452b1.zip |
Diffstat (limited to 'src/core/Event.hpp')
-rw-r--r-- | src/core/Event.hpp | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/src/core/Event.hpp b/src/core/Event.hpp deleted file mode 100644 index cfa990a..0000000 --- a/src/core/Event.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#include <queue> -#include <map> -#include <thread> -#include <mutex> -#include <condition_variable> -#include <chrono> -#include <variant> -#include <functional> - -#include <Vector.hpp> - -enum class EventType { - Echo, - ChunkChanged, -}; - -struct EchoData { - std::chrono::time_point<std::chrono::high_resolution_clock> time; -}; - -struct ChunkChangedData { - Vector chunkPosition; -}; - -using EventData = std::variant<EchoData, ChunkChangedData>; - -struct Event { - EventType type; - EventData data; -}; - -class EventListener { - friend class EventAgregator; - - using HandlerFunc = std::function<void(EventData)>; - - std::map<EventType, HandlerFunc> handlers; //TODO: There must be more elegant solution than std::variant of all data - - std::mutex eventsMutex; - - std::queue<Event> events; - - void PushEvent(Event event); - -public: - EventListener(); - ~EventListener(); - bool IsEventsQueueIsNotEmpty(); - - void RegisterHandler(EventType type, HandlerFunc handler) { - handlers[type] = handler; - } - - void HandleEvent() { - eventsMutex.lock(); - if (events.empty()) { - eventsMutex.unlock(); - return; - } - Event event = events.front(); - events.pop(); - eventsMutex.unlock(); - auto function = handlers[event.type]; - function(event.data); - } -}; - -class EventAgregator { - friend EventListener; - - EventAgregator() = default; - static std::queue<Event> eventsToHandle; - static std::mutex queueMutex; - static bool isStarted; - static std::vector<EventListener *> listeners; - static std::mutex listenersMutex; - - static void EventHandlingLoop(); - - static void RegisterListener(EventListener &listener); - static void UnregisterListener(EventListener &listener); - -public: - static void PushEvent(EventType type, EventData data) { - if (!isStarted) { - isStarted = true; - std::thread(&EventAgregator::EventHandlingLoop).detach(); - } - Event event; - event.type = type; - event.data = data; - eventsToHandle.push(event); - } -};
\ No newline at end of file |