LocalPlayer::accelerateHorizontal: cleanups
[oweals/minetest.git] / src / clientiface.cpp
index a629ccee7b18df1424cc1ec6396bf73b14c73cc4..361315c3bcb6411456e61afd202a61d1c17a84cc 100644 (file)
@@ -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);