#ifndef EVENT_H__ #define EVENT_H__ #include <map> #include <string> #include <memory> #include <mutex> #include <tuple> #include <boost/asio.hpp> typedef std::map<std::string, std::string> 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<std::string, CollectedEvent> 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