void Network::ClientDisconnected(kNet::MessageConnection* connection) { connection->Disconnect(0); // Remove the client connection that corresponds to this MessageConnection HashMap<kNet::MessageConnection*, SharedPtr<Connection> >::Iterator i = clientConnections_.Find(connection); if (i != clientConnections_.End()) { Connection* connection = i->second_; LOGINFO("Client " + connection->ToString() + " disconnected"); using namespace ClientDisconnected; VariantMap eventData; eventData[P_CONNECTION] = (void*)connection; connection->SendEvent(E_CLIENTDISCONNECTED, eventData); clientConnections_.Erase(i); } }
void Network::HandleMessage(kNet::MessageConnection *source, kNet::packet_id_t packetId, kNet::message_id_t msgId, const char *data, size_t numBytes) { // Only process messages from known sources Connection* connection = GetConnection(source); if (connection) { MemoryBuffer msg(data, numBytes); if (connection->ProcessMessage(msgId, msg)) return; // If message was not handled internally, forward as an event using namespace NetworkMessage; VariantMap eventData; eventData[P_CONNECTION] = (void*)connection; eventData[P_MESSAGEID] = (int)msgId; eventData[P_DATA].SetBuffer(msg.GetData(), msg.GetSize()); connection->SendEvent(E_NETWORKMESSAGE, eventData); } else LOGWARNING("Discarding message from unknown MessageConnection " + ToString((void*)source)); }