#ifndef EVENT_MANAGER_H #define EVENT_MANAGER_H #include #include #include #include #include "Event.h" class EventHandlerBase; class EventManager { public: static std::shared_ptr getInstance(); static void destroyInstance(); private: static std::shared_ptr s_instance; public: EventManager(EventManager const &) = delete; void operator=(EventManager const &) = delete; void registerEventHandler(EventHandlerBase *eventHandler); void unregisterEventHandler(EventHandlerBase *eventHandler); void sendEventImmediately(std::shared_ptr event); void addEvent(std::shared_ptr event); void processEvents(); void clearEvents(); bool hasEvents() const; private: EventManager() = default; std::map m_eventHandlers; std::vector> m_events; std::mutex m_eventHandlersMutex; std::mutex m_eventsMutex; }; #endif // EVENT_MANAGER_H