@@ -272,25 +272,25 @@ NetworkRecvStatus ServerNetworkGameSocke
/* If we were transfering a map to this client, stop the savegame creation
* process and queue the next client to receive the map. */
if (this->status == STATUS_MAP) {
/* Ensure the saving of the game is stopped too. */
this->savegame->Destroy();
this->savegame = nullptr;
this->CheckNextClientToSendMap(this);
}
NetworkAdminClientError(this->client_id, NETWORK_ERROR_CONNECTION_LOST);
Debug(net, 3, "Closed client connection {}", this->client_id);
Debug(net, 3, "[{}] Client #{} closed connection", ServerNetworkGameSocketHandler::GetName(), this->client_id);
/* We just lost one client :( */
if (this->status >= STATUS_AUTHORIZED) _network_game_info.clients_on--;
extern byte _network_clients_connected;
_network_clients_connected--;
this->SendPackets(true);
delete this->GetInfo();
delete this;
InvalidateWindowData(WC_CLIENT_LIST, 0);
@@ -939,24 +939,26 @@ NetworkRecvStatus ServerNetworkGameSocke
return this->SendMap();
NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet *p)
{
/* Client has the map, now start syncing */
if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) {
std::string client_name = this->GetClientName();
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, "", this->client_id);
Debug(net, 3, "[{}] Client #{} ({}) joined as {}", ServerNetworkGameSocketHandler::GetName(), this->client_id, this->GetClientIP(), client_name);
/* Mark the client as pre-active, and wait for an ACK
* so we know it is done loading and in sync with us */
this->status = STATUS_PRE_ACTIVE;
NetworkHandleCommandQueue(this);
this->SendFrame();
this->SendSync();
/* This is the frame the client receives
* we need it later on to make sure the client is not too slow */
this->last_frame = _frame_counter;
this->last_frame_server = _frame_counter;
Status change: