#ifndef EVENT_H__ #define EVENT_H__ #include #include #include #include #include #include typedef std::map EventType; namespace i2p { namespace event { class EventListener { public: virtual ~EventListener() {}; virtual void HandleEvent(const EventType & ev) = 0; /** @brief handle collected event when pumped */ virtual void HandlePumpEvent(const EventType & ev, const uint64_t & val) = 0; }; class EventCore { public: void QueueEvent(const EventType & ev); void CollectEvent(const std::string & type, const std::string & ident, uint64_t val); void SetListener(EventListener * l); void PumpCollected(EventListener * l); private: std::mutex m_collect_mutex; struct CollectedEvent { std::string Key; std::string Ident; uint64_t Val; }; std::map m_collected; EventListener * m_listener = nullptr; }; #ifdef WITH_EVENTS extern EventCore core; #endif } } void QueueIntEvent(const std::string & type, const std::string & ident, uint64_t val); void EmitEvent(const EventType & ev); #endif