Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

113 lignes
2.6 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright © 2013—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com>
  5. // © 2017—2018 Sam Hocevar <sam@hocevar.net>
  6. //
  7. // Lol Engine is free software. It comes without any warranty, to
  8. // the extent permitted by applicable law. You can redistribute it
  9. // and/or modify it under the terms of the Do What the Fuck You Want
  10. // to Public License, Version 2, as published by the WTFPL Task Force.
  11. // See http://www.wtfpl.net/ for more details.
  12. //
  13. #pragma once
  14. #include <string>
  15. #include <map>
  16. //
  17. // The Message Service class
  18. // -------------------------
  19. //
  20. namespace lol
  21. {
  22. //MessageBucket -- Utility enum for message service ---------------------------
  23. struct MessageBucketBase : public StructSafeEnum
  24. {
  25. enum Type
  26. {
  27. AppIn,
  28. AppOut,
  29. Bckt0,
  30. Bckt1,
  31. Bckt2,
  32. Bckt3,
  33. Bckt4,
  34. Bckt5,
  35. Bckt6,
  36. Bckt7,
  37. Bckt8,
  38. Bckt9,
  39. MAX
  40. };
  41. protected:
  42. virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map)
  43. {
  44. enum_map[AppIn] = "AppIn";
  45. enum_map[AppOut] = "AppOut";
  46. enum_map[Bckt0] = "Bckt0";
  47. enum_map[Bckt1] = "Bckt1";
  48. enum_map[Bckt2] = "Bckt2";
  49. enum_map[Bckt3] = "Bckt3";
  50. enum_map[Bckt4] = "Bckt4";
  51. enum_map[Bckt5] = "Bckt5";
  52. enum_map[Bckt6] = "Bckt6";
  53. enum_map[Bckt7] = "Bckt7";
  54. enum_map[Bckt8] = "Bckt8";
  55. enum_map[Bckt9] = "Bckt9";
  56. enum_map[MAX] = "MAX";
  57. return true;
  58. }
  59. };
  60. typedef SafeEnum<MessageBucketBase> MessageBucket;
  61. //Message list container with time in it
  62. struct MessageList
  63. {
  64. MessageList(time_t timestamp, const std::string& message)
  65. : m_timestamp(timestamp),
  66. m_message(message)
  67. {
  68. }
  69. time_t m_timestamp;
  70. std::string m_message;
  71. };
  72. /*
  73. A template class perhaps ?
  74. */
  75. class MessageService
  76. {
  77. public:
  78. //CTor/DTor
  79. MessageService();
  80. ~MessageService();
  81. static std::string GetName() { return "<messageservice>"; }
  82. //Setup/Destroy
  83. static void Setup();
  84. static void Destroy();
  85. //Common interactions
  86. static bool Send(MessageBucket id, const std::string& message);
  87. static bool FetchFirst(MessageBucket id, std::string& message);
  88. static bool FetchFirst(MessageBucket id, std::string& message, time_t &timestamp);
  89. static bool FetchAll(MessageBucket id, std::string& message);
  90. static bool FetchAll(MessageBucket id, std::string& message, time_t &first_timestamp);
  91. private:
  92. array<array<MessageList> > m_bucket;
  93. };
  94. extern MessageService *g_messageservice;
  95. } /* namespace lol */