BsMessageHandler.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include "BsPrerequisitesUtil.h"
  3. #include "BsModule.h"
  4. namespace BansheeEngine
  5. {
  6. /**
  7. * @brief Allows you to transparently pass messages
  8. * between different systems.
  9. *
  10. * @note Sim thread only.
  11. */
  12. class BS_UTILITY_EXPORT MessageHandler : public Module<MessageHandler>
  13. {
  14. struct MessageHandlerData
  15. {
  16. UINT32 id;
  17. std::function<void()> callback;
  18. };
  19. public:
  20. MessageHandler();
  21. /**
  22. * @brief Sends a message to all subscribed listeners.
  23. */
  24. void send(MessageId message);
  25. /**
  26. * @brief Subscribes a message listener for the specified message.
  27. * Provided callback will be triggered whenever that message
  28. * gets sent.
  29. *
  30. * @returns A handle to the message subscription that you can use to
  31. * unsubscribe from listening.
  32. */
  33. HMessage listen(MessageId message, std::function<void()> callback);
  34. private:
  35. friend class HMessage;
  36. void unsubscribe(UINT32 handleId);
  37. Map<UINT32, Vector<MessageHandlerData>> mMessageHandlers;
  38. Map<UINT32, UINT32> mHandlerIdToMessageMap;
  39. UINT32 mNextCallbackId;
  40. };
  41. }