private bool Is_Channel_Shutdown_Reason( ERemovedFromLobbyReason reason ) { switch ( reason ) { case ERemovedFromLobbyReason.Lobby_Destroyed_By_Creator: case ERemovedFromLobbyReason.Lobby_Destroyed_Creation_Failure: case ERemovedFromLobbyReason.Lobby_Destroyed_Game_Started: case ERemovedFromLobbyReason.Lobby_Destroyed_Due_To_Disconnect_Timeout: return true; default: return false; } }
public void Remove_From_Lobby( ELobbyID lobby_id, EPersistenceID player_id, ERemovedFromLobbyReason reason, EMessageRequestID request_id ) { CServerLobby lobby = Get_Lobby( lobby_id ); if ( lobby == null ) { return; } CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Removing player {0} from lobby {1} for reason {2}.", CConnectedPlayerManager.Get_Player_Log_Name( player_id ), Get_Lobby_Log_Description( lobby_id ), reason.ToString() ) ); if ( CConnectedPlayerManager.Instance.Is_Connected( player_id ) && reason != ERemovedFromLobbyReason.Lobby_Destroyed_Game_Started ) { CAsyncBackendOperations.Join_General_Channel( player_id, EMessageRequestID.Invalid ); } CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id ); player.On_Leave_Lobby(); CLobbyMemberLeftOperation op = new CLobbyMemberLeftOperation( player_id, reason ); bool is_lobby_shutdown = Is_Channel_Shutdown_Reason( reason ); if ( is_lobby_shutdown ) { CServerMessageRouter.Send_Message_To_Player( new CLobbyOperationMessage( op ), player_id ); } else { Send_Message_To_Members( lobby_id, new CLobbyOperationMessage( op ) ); } lobby.Remove_Member( player_id, !is_lobby_shutdown ); }
// construction public CLobbyMemberLeftOperation( EPersistenceID player_id, ERemovedFromLobbyReason reason ) { PlayerID = player_id; Reason = reason; }
public void Remove_From_Lobby( ELobbyID lobby_id, EPersistenceID player_id, ERemovedFromLobbyReason reason ) { Remove_From_Lobby( lobby_id, player_id, reason, EMessageRequestID.Invalid ); }
private EClientTextID Compute_Leave_Lobby_Text_ID( ERemovedFromLobbyReason reason, EPersistenceID leaving_player_id, EPersistenceID creator_id ) { EPersistenceID local_player_id = CClientLogicalThread.Instance.ConnectedID; switch ( reason ) { case ERemovedFromLobbyReason.Kicked_By_Creator: if ( local_player_id == leaving_player_id ) { return EClientTextID.Client_Lobby_Leave_You_Were_Kicked; } else if ( local_player_id == creator_id ) { return EClientTextID.Client_Lobby_Leave_You_Kicked_Someone; } else { return EClientTextID.Client_Lobby_Leave_Someone_Was_Kicked; } case ERemovedFromLobbyReason.Banned_By_Creator: if ( local_player_id == leaving_player_id ) { return EClientTextID.Client_Lobby_Leave_You_Were_Banned; } else if ( local_player_id == creator_id ) { return EClientTextID.Invalid; // in this case, we just want to print the success message from the ban result message } else { return EClientTextID.Client_Lobby_Leave_Someone_Was_Banned; } case ERemovedFromLobbyReason.Disconnect_Timeout: return EClientTextID.Client_Lobby_Leave_Disconnect_Timeout; case ERemovedFromLobbyReason.Lobby_Destroyed_Due_To_Disconnect_Timeout: return EClientTextID.Client_Lobby_Leave_Creator_Disconnect_Timeout; case ERemovedFromLobbyReason.Lobby_Destroyed_By_Creator: if ( local_player_id == creator_id ) { return EClientTextID.Client_Lobby_Leave_You_Destroyed_The_Lobby; } else { return EClientTextID.Client_Lobby_Leave_Lobby_Destroyed; } case ERemovedFromLobbyReason.Lobby_Destroyed_Creation_Failure: return EClientTextID.Invalid; case ERemovedFromLobbyReason.Lobby_Destroyed_Game_Started: return EClientTextID.Invalid; case ERemovedFromLobbyReason.Self_Request: if ( local_player_id == leaving_player_id ) { return EClientTextID.Client_Lobby_Leave_You_Left; } else { return EClientTextID.Client_Lobby_Leave_Player_Left; } case ERemovedFromLobbyReason.Unknown: return EClientTextID.Client_Lobby_Leave_Unknown_Reason; case ERemovedFromLobbyReason.Rejoin_Failure: return EClientTextID.Client_Lobby_Leave_Rejoin_Failure; } return EClientTextID.Invalid; }