#include "protocol/PacketDispatcher.h" namespace td { namespace protocol { void PacketDispatcher::RegisterHandler(PacketType type, PacketHandler* handler) { auto found = std::find(m_Handlers[type].begin(), m_Handlers[type].end(), handler); if (found == m_Handlers[type].end()) m_Handlers[type].push_back(handler); } void PacketDispatcher::UnregisterHandler(PacketType type, PacketHandler* handler) { auto found = std::find(m_Handlers[type].begin(), m_Handlers[type].end(), handler); if (found != m_Handlers[type].end()) m_Handlers[type].erase(found); } void PacketDispatcher::UnregisterHandler(PacketHandler* handler) { for (auto& pair : m_Handlers) { if (pair.second.empty()) continue; PacketType type = pair.first; m_Handlers[type].erase(std::remove(m_Handlers[type].begin(), m_Handlers[type].end(), handler), m_Handlers[type].end()); } } void PacketDispatcher::Dispatch(const PacketPtr& packet) { if (!packet) return; PacketType type = packet->GetType(); for (PacketHandler* handler : m_Handlers[type]) packet->Dispatch(handler); } } // namespace protocol } // namespace td