From f605ea9eeb3fc023937ee3d37696628208f20e23 Mon Sep 17 00:00:00 2001 From: Rachel Bryk <RachelBryk@gmail.com> Date: Wed, 16 Oct 2013 21:44:49 -0400 Subject: [PATCH] [Netplay] Allow a spectator to leave without affecting players. --- Source/Core/Core/Src/NetPlayServer.cpp | 27 ++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Source/Core/Core/Src/NetPlayServer.cpp b/Source/Core/Core/Src/NetPlayServer.cpp index 00fec793c7..8cd6f08a9a 100644 --- a/Source/Core/Core/Src/NetPlayServer.cpp +++ b/Source/Core/Core/Src/NetPlayServer.cpp @@ -228,21 +228,28 @@ unsigned int NetPlayServer::OnConnect(sf::SocketTCP& socket) // called from ---NETPLAY--- thread unsigned int NetPlayServer::OnDisconnect(sf::SocketTCP& socket) { + PlayerId pid = m_players[socket].pid; + if (m_is_running) { - PanicAlertT("Client disconnect while game is running!! NetPlay is disabled. You must manually stop the game."); - std::lock_guard<std::recursive_mutex> lkg(m_crit.game); - m_is_running = false; + for (int i = 0; i < 4; i++) + { + if (m_pad_map[i] == pid) + { + PanicAlertT("Client disconnect while game is running!! NetPlay is disabled. You must manually stop the game."); + std::lock_guard<std::recursive_mutex> lkg(m_crit.game); + m_is_running = false; - sf::Packet spac; - spac << (MessageId)NP_MSG_DISABLE_GAME; - // this thread doesn't need players lock - std::lock_guard<std::recursive_mutex> lks(m_crit.send); - SendToClients(spac); + sf::Packet spac; + spac << (MessageId)NP_MSG_DISABLE_GAME; + // this thread doesn't need players lock + std::lock_guard<std::recursive_mutex> lks(m_crit.send); + SendToClients(spac); + break; + } + } } - PlayerId pid = m_players[socket].pid; - sf::Packet spac; spac << (MessageId)NP_MSG_PLAYER_LEAVE; spac << pid;