#pragma once /** * \file MessageDispatcher.h * \brief File containing the sp::MessageDispatcher class */ #include #include namespace sp { /** * \class MessageDispatcher * \brief Class used to dispatch messages */ template class MessageDispatcher { private: std::map> m_Handlers; public: using MessageBaseType = MessageBase; /** * \brief Constructor */ MessageDispatcher() {} /** * \brief Dispatch a packet * \param packet The packet to dispatch */ void Dispatch(const MessageBase& a_Message); /** * \brief Register a packet handler * \param type The packet type * \param handler The packet handler */ void RegisterHandler(MessageIdType a_MessageType, MessageHandler* a_Handler); /** * \brief Unregister a packet handler * \param type The packet type * \param handler The packet handler */ void UnregisterHandler(MessageIdType a_MessageType, MessageHandler* a_Handler); /** * \brief Unregister a packet handler * \param handler The packet handler */ void UnregisterHandler(MessageHandler* a_Handler); }; #include } // namespace sp