diff options
Diffstat (limited to 'src/clientiface.cpp')
-rw-r--r-- | src/clientiface.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
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<u16, RemoteClient*>::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); |