1
0
forked from mirrors/0ad

Don't throw FSM update errors (type=16 state=6) when kicking clients while others haven't finished the authentication, loading screen or synchronization yet, refs #3241.

This was SVN commit r18859.
This commit is contained in:
elexis
2016-10-23 15:44:02 +00:00
parent 20399b72f1
commit 44f0929ea6
2 changed files with 5 additions and 3 deletions
+2
View File
@@ -105,6 +105,7 @@ CNetClient::CNetClient(CGame* game, bool isLocalClient) :
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CHAT, NCS_JOIN_SYNCING, (void*)&OnChat, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_GAME_SETUP, NCS_JOIN_SYNCING, (void*)&OnGameSetup, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_PLAYER_ASSIGNMENT, NCS_JOIN_SYNCING, (void*)&OnPlayerAssignment, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_KICKED, NCS_JOIN_SYNCING, (void*)&OnKicked, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CLIENT_TIMEOUT, NCS_JOIN_SYNCING, (void*)&OnClientTimeout, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CLIENT_PERFORMANCE, NCS_JOIN_SYNCING, (void*)&OnClientPerformance, context);
AddTransition(NCS_JOIN_SYNCING, (uint)NMT_GAME_START, NCS_JOIN_SYNCING, (void*)&OnGameStart, context);
@@ -115,6 +116,7 @@ CNetClient::CNetClient(CGame* game, bool isLocalClient) :
AddTransition(NCS_LOADING, (uint)NMT_CHAT, NCS_LOADING, (void*)&OnChat, context);
AddTransition(NCS_LOADING, (uint)NMT_GAME_SETUP, NCS_LOADING, (void*)&OnGameSetup, context);
AddTransition(NCS_LOADING, (uint)NMT_PLAYER_ASSIGNMENT, NCS_LOADING, (void*)&OnPlayerAssignment, context);
AddTransition(NCS_LOADING, (uint)NMT_KICKED, NCS_LOADING, (void*)&OnKicked, context);
AddTransition(NCS_LOADING, (uint)NMT_CLIENT_TIMEOUT, NCS_LOADING, (void*)&OnClientTimeout, context);
AddTransition(NCS_LOADING, (uint)NMT_CLIENT_PERFORMANCE, NCS_LOADING, (void*)&OnClientPerformance, context);
AddTransition(NCS_LOADING, (uint)NMT_LOADED_GAME, NCS_INGAME, (void*)&OnLoadedGame, context);
+3 -3
View File
@@ -808,7 +808,9 @@ void CNetServerWorker::KickPlayer(const CStrW& playerName, const bool ban)
CKickedMessage kickedMessage;
kickedMessage.m_Name = playerName;
kickedMessage.m_Ban = ban;
Broadcast(&kickedMessage);
for (CNetServerSession* session : m_Sessions)
if (session->GetCurrState() > NSS_AUTHENTICATE)
session->SendMessage(&kickedMessage);
}
void CNetServerWorker::AssignPlayer(int playerID, const CStr& guid)
@@ -1321,10 +1323,8 @@ bool CNetServerWorker::OnClientPaused(void* context, CFsmEvent* event)
void CNetServerWorker::CheckGameLoadStatus(CNetServerSession* changedSession)
{
for (const CNetServerSession* session : m_Sessions)
{
if (session != changedSession && session->GetCurrState() != NSS_INGAME)
return;
}
CLoadedGameMessage loaded;
loaded.m_CurrentTurn = 0;