BsMessageHandler.h 1.1 KB

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