1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-25 21:38:59 +02:00

Reconnection works

This commit is contained in:
nordsoft 2022-10-04 05:42:14 +04:00
parent 16a5414247
commit 722acb2a1d
3 changed files with 18 additions and 3 deletions

View File

@ -563,6 +563,7 @@ void CServerHandler::startGameplay(CGameState * gameState)
Settings saveUuid = settings.write["server"]["uuid"];
saveUuid->String() = uuid;
Settings saveNames = settings.write["server"]["names"];
saveNames->Vector().clear();
for(auto & name : myNames)
{
JsonNode jsonName;

View File

@ -353,8 +353,9 @@ void PlayerReinitInterface::applyCl(CClient * cl)
plSettings.connectedPlayerIDs.clear();
cl->initPlayerEnvironments();
cl->initPlayerInterfaces();
if(cl->gameState()->currentPlayer == player)
callOnlyThatInterface(cl, player, &CGameInterface::yourTurn);
auto currentPlayer = cl->gameState()->currentPlayer;
callAllInterfaces(cl, &IGameEventsReceiver::playerStartsTurn, currentPlayer);
callOnlyThatInterface(cl, currentPlayer, &CGameInterface::yourTurn);
}
else if(playerConnectionId == CSH->c->connectionID)
{

View File

@ -327,10 +327,23 @@ void CVCMIServer::connectionAccepted(const boost::system::error_code & ec)
connections.insert(c);
c->handler = std::make_shared<boost::thread>(&CVCMIServer::threadHandleClient, this, c);
if(!hangingConnections.empty())
if(!hangingConnections.empty() && gh)
{
//TODO: check client uuid
logNetwork->info("Reconnection player");
c->connectionID = (*hangingConnections.begin())->connectionID;
for(auto & playerConnection : gh->connections)
{
for(auto & existingConnection : playerConnection.second)
{
if(existingConnection == *hangingConnections.begin())
{
playerConnection.second.erase(existingConnection);
playerConnection.second.insert(c);
break;
}
}
}
//hangingConnections.clear();
}
}