Major redesign: The game can not be left without disconnecting from the server. This happens if a player is kicked, if he wishes to leave, or for other reasons. Error packets from the server will always cause a disconnect, however.
If joining a game fails, there is a proper failure packet now.
This commit is contained in:
@@ -142,7 +142,7 @@ AbstractServerGameStateReceiving::Process(ServerGameThread &server)
|
||||
packet = server.GetReceiver().Recv(session.sessionData->GetSocket(), session.sessionData->GetReceiveBuffer());
|
||||
} catch (const NetException &)
|
||||
{
|
||||
server.CloseSessionDelayed(session);
|
||||
server.RemoveSession(session);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
@@ -167,6 +167,10 @@ AbstractServerGameStateReceiving::Process(ServerGameThread &server)
|
||||
server.GetSender().Send(session.sessionData->GetSocket(), info);
|
||||
}
|
||||
}
|
||||
else if (packet->ToNetPacketLeaveCurrentGame())
|
||||
{
|
||||
server.MoveSessionToLobby(session, NTF_NET_REMOVED_ON_REQUEST);
|
||||
}
|
||||
// Chat text is always allowed.
|
||||
else if (packet->ToNetPacketSendChatText())
|
||||
{
|
||||
@@ -243,7 +247,7 @@ ServerGameStateInit::HandleNewSession(ServerGameThread &server, SessionWrapper s
|
||||
// Check the number of players.
|
||||
if (curNumPlayers >= (size_t)server.GetGameData().maxNumberOfPlayers)
|
||||
{
|
||||
server.SessionError(session, ERR_NET_SERVER_FULL);
|
||||
server.MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -359,7 +363,7 @@ void
|
||||
AbstractServerGameStateRunning::HandleNewSession(ServerGameThread &server, SessionWrapper session)
|
||||
{
|
||||
// Do not accept new sessions in this state.
|
||||
server.SessionError(session, ERR_NET_GAME_ALREADY_RUNNING);
|
||||
server.MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user