#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 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(const std::shared_ptr& a_Handler); /** * \brief Unregister a packet handler * \param handler The packet handler */ void UnregisterHandler(const std::shared_ptr& a_Handler); private: std::vector> m_Handlers; }; } // namespace sp #include