Kaynağa Gözat

Fix connection termination handling

Ivan Savenko 1 yıl önce
ebeveyn
işleme
93038b791e

+ 0 - 1
client/CServerHandler.cpp

@@ -913,7 +913,6 @@ void CServerHandler::onDisconnected(const std::shared_ptr<INetworkConnection> &
 
 	if(getState() == EClientState::DISCONNECTING)
 	{
-		assert(networkConnection == nullptr);
 		// Note: this branch can be reached on app shutdown, when main thread holds mutex till destruction
 		logNetwork->info("Successfully closed connection to server!");
 		return;

+ 5 - 3
lib/network/NetworkServer.cpp

@@ -49,9 +49,11 @@ void NetworkServer::connectionAccepted(std::shared_ptr<NetworkSocket> upcomingCo
 void NetworkServer::onDisconnected(const std::shared_ptr<INetworkConnection> & connection, const std::string & errorMessage)
 {
 	logNetwork->info("Connection lost! Reason: %s", errorMessage);
-	assert(connections.count(connection));
-	connections.erase(connection);
-	listener.onDisconnected(connection, errorMessage);
+	if (connections.count(connection))
+	{
+		connections.erase(connection);
+		listener.onDisconnected(connection, errorMessage);
+	}
 }
 
 void NetworkServer::onPacketReceived(const std::shared_ptr<INetworkConnection> & connection, const std::vector<std::byte> & message)

+ 2 - 0
server/GlobalLobbyProcessor.cpp

@@ -51,6 +51,8 @@ void GlobalLobbyProcessor::onDisconnected(const std::shared_ptr<INetworkConnecti
 					message["accountID"].String() = proxy.first;
 
 					sendMessage(controlConnection, message);
+
+					proxyConnections.erase(proxy.first);
 					break;
 				}
 			}