Event.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "Event.h"
  2. #include "Log.h"
  3. namespace i2p
  4. {
  5. namespace event
  6. {
  7. #ifdef WITH_EVENTS
  8. EventCore core;
  9. #endif
  10. void EventCore::SetListener(EventListener * l)
  11. {
  12. m_listener = l;
  13. LogPrint(eLogInfo, "Event: listener set");
  14. }
  15. void EventCore::QueueEvent(const EventType & ev)
  16. {
  17. if(m_listener) m_listener->HandleEvent(ev);
  18. }
  19. void EventCore::CollectEvent(const std::string & type, const std::string & ident, uint64_t val)
  20. {
  21. std::unique_lock<std::mutex> lock(m_collect_mutex);
  22. std::string key = type + "." + ident;
  23. if (m_collected.find(key) == m_collected.end())
  24. {
  25. m_collected[key] = {type, key, 0};
  26. }
  27. m_collected[key].Val += val;
  28. }
  29. void EventCore::PumpCollected(EventListener * listener)
  30. {
  31. std::unique_lock<std::mutex> lock(m_collect_mutex);
  32. if(listener)
  33. {
  34. for(const auto & ev : m_collected) {
  35. listener->HandlePumpEvent({{"type", ev.second.Key}, {"ident", ev.second.Ident}}, ev.second.Val);
  36. }
  37. }
  38. m_collected.clear();
  39. }
  40. }
  41. }
  42. void QueueIntEvent(const std::string & type, const std::string & ident, uint64_t val)
  43. {
  44. #ifdef WITH_EVENTS
  45. i2p::event::core.CollectEvent(type, ident, val);
  46. #endif
  47. }
  48. void EmitEvent(const EventType & e)
  49. {
  50. #if WITH_EVENTS
  51. i2p::event::core.QueueEvent(e);
  52. #endif
  53. }