38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
#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
|