#pragma once /** * \file MessageDispatcher.h * \brief File containing the sp::MessageDispatcher class */ #include #include #include namespace sp { /** * \class MessageDispatcher * \brief Class used to dispatch messages */ template class MessageDispatcher { public: using MessageBaseType = MessageBase; using MessageIdType = typename MessageBase::MessageIdType; using MessageHandler = typename MessageBase::HandlerType; /** * \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); private: std::map> m_Handlers; }; } // namespace sp #include