From 7ddf67aa1478813e12a5fcdfb4986b9e5adfe62f Mon Sep 17 00:00:00 2001 From: Loïc Blot Date: Sun, 16 Jul 2017 10:47:31 +0200 Subject: Chat protocol rewrite (#5117) * New TOCLIENT_CHAT_MESSAGE packet * Rename old packet to TOCLIENT_CHAT_MESSAGE_OLD for compat * Handle TOCLIENT_CHAT_MESSAGE new structure client side * Client chat queue should use a specific object * SendChatMessage: use the right packet depending on protocol version (not complete yet) * Add chatmessage(type) objects and handle them client side (partially) * Use ChatMessage instead of std::wstring server side * Update with timestamp support --- src/clientiface.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/clientiface.cpp') diff --git a/src/clientiface.cpp b/src/clientiface.cpp index a629ccee7..361315c3b 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -693,6 +693,32 @@ void ClientInterface::sendToAll(NetworkPacket *pkt) } } +void ClientInterface::sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt, + u16 min_proto_ver) +{ + MutexAutoLock clientslock(m_clients_mutex); + for (std::unordered_map::iterator i = m_clients.begin(); + i != m_clients.end(); ++i) { + RemoteClient *client = i->second; + NetworkPacket *pkt_to_send = nullptr; + + if (client->net_proto_version >= min_proto_ver) { + pkt_to_send = pkt; + } else if (client->net_proto_version != 0) { + pkt_to_send = legacypkt; + } else { + warningstream << "Client with unhandled version to handle: '" + << client->net_proto_version << "'"; + continue; + } + + m_con->Send(client->peer_id, + clientCommandFactoryTable[pkt_to_send->getCommand()].channel, + pkt_to_send, + clientCommandFactoryTable[pkt_to_send->getCommand()].reliable); + } +} + RemoteClient* ClientInterface::getClientNoEx(u16 peer_id, ClientState state_min) { MutexAutoLock clientslock(m_clients_mutex); -- cgit v1.2.3