dispatcher: use weak_ptr

This commit is contained in:
2025-03-02 20:37:54 +01:00
parent 643da71e34
commit 8d3d9e38ee
2 changed files with 26 additions and 12 deletions

View File

@@ -17,7 +17,7 @@ namespace sp {
template <typename MessageIdType, typename MessageBase, typename MessageHandler>
class MessageDispatcher {
private:
std::map<MessageIdType, std::vector<std::shared_ptr<MessageHandler>>> m_Handlers;
std::map<MessageIdType, std::vector<std::weak_ptr<MessageHandler>>> m_Handlers;
public:
using MessageBaseType = MessageBase;
@@ -38,18 +38,20 @@ class MessageDispatcher {
* \param type The packet type
* \param handler The packet handler
*/
void RegisterHandler(MessageIdType a_MessageType, const std::shared_ptr<MessageHandler>& a_Handler);
void RegisterHandler(MessageIdType a_MessageType, const std::weak_ptr<MessageHandler>& a_Handler);
/**
* \brief Unregister a packet handler
* \param type The packet type
* \param handler The packet handler
*/
void UnregisterHandler(MessageIdType a_MessageType, const std::shared_ptr<MessageHandler>& a_Handler);
void UnregisterHandler(MessageIdType a_MessageType, const std::weak_ptr<MessageHandler>& a_Handler);
/**
* \brief Unregister a packet handler
* \param handler The packet handler
*/
void UnregisterHandler(const std::shared_ptr<MessageHandler>& a_Handler);
void UnregisterHandler(const std::weak_ptr<MessageHandler>& a_Handler);
};
#include <sp/protocol/message/MessageDispatcherImpl.inl>