Always delay before closing a session. Last part of the fix.

This commit is contained in:
lotodore
2007-10-28 13:04:05 +00:00
parent fa7af40a49
commit 92f03db7a2
2 changed files with 6 additions and 11 deletions
+4 -4
View File
@@ -40,10 +40,10 @@ public:
GameSenderCallback(ServerGameThread &server) : m_server(server) {}
virtual ~GameSenderCallback() {}
virtual bool GetSocketForSession(SessionId session, SOCKET &outSocket)
{
return m_server.GetSessionManager().GetSocketForSession(session, outSocket);
}
virtual bool GetSocketForSession(SessionId session, SOCKET &outSocket)
{
return m_server.GetSessionManager().GetSocketForSession(session, outSocket);
}
virtual void SignalNetError(SessionId /*session*/, int /*errorID*/, int /*osErrorID*/)
{
// We just ignore send errors for now, on server side.
+2 -7
View File
@@ -120,9 +120,7 @@ void
ServerLobbyThread::RemoveSessionFromGame(SessionWrapper session)
{
// Just remove the session. Only for fatal errors.
m_gameSessionManager.RemoveSession(session.sessionData->GetId());
// Update stats (if needed).
BroadcastStatisticsUpdate();
CloseSessionDelayed(session);
}
void
@@ -312,10 +310,7 @@ ServerLobbyThread::ProcessLoop()
} catch (const NetException &)
{
// On error: Close this session.
m_initTimerSessionMap.erase(session.sessionData->GetId());
m_sessionManager.RemoveSession(session.sessionData->GetId());
// Update stats (if needed).
BroadcastStatisticsUpdate();
CloseSessionDelayed(session);
return;
}
if (packet.get())