1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-17 20:58:07 +02:00

Fix crash on disconnecting from the game

This commit is contained in:
Ivan Savenko 2024-06-04 14:12:16 +00:00
parent 56ee3713fe
commit dcbfea018b

View File

@ -165,6 +165,9 @@ void CVCMIServer::onNewConnection(const std::shared_ptr<INetworkConnection> & co
void CVCMIServer::onPacketReceived(const std::shared_ptr<INetworkConnection> & connection, const std::vector<std::byte> & message)
{
std::shared_ptr<CConnection> c = findConnection(connection);
if (c == nullptr)
throw std::out_of_range("Unknown connection received in CVCMIServer::findConnection");
auto pack = c->retrievePack(message);
pack->c = c;
CVCMIServerPackVisitor visitor(*this, this->gh);
@ -197,7 +200,7 @@ std::shared_ptr<CConnection> CVCMIServer::findConnection(const std::shared_ptr<I
return gameConnection;
}
throw std::runtime_error("Unknown connection received in CVCMIServer::findConnection");
return nullptr;
}
bool CVCMIServer::wasStartedByClient() const
@ -342,6 +345,9 @@ void CVCMIServer::onDisconnected(const std::shared_ptr<INetworkConnection> & con
logNetwork->error("Network error receiving a pack. Connection has been closed");
std::shared_ptr<CConnection> c = findConnection(connection);
if (!c)
return; // player have already disconnected via clientDisconnected call
vstd::erase(activeConnections, c);
if(activeConnections.empty() || hostClientId == c->connectionID)