private ERemovedFromLobbyReason Compute_Removal_Reason( ELobbyDestroyedReason destroy_reason ) { switch ( destroy_reason ) { case ELobbyDestroyedReason.Creation_Failure: return ERemovedFromLobbyReason.Lobby_Destroyed_Creation_Failure; case ELobbyDestroyedReason.Creator_Destroyed: return ERemovedFromLobbyReason.Lobby_Destroyed_By_Creator; case ELobbyDestroyedReason.Creator_Disconnect_Timeout: return ERemovedFromLobbyReason.Lobby_Destroyed_Due_To_Disconnect_Timeout; case ELobbyDestroyedReason.Game_Started: return ERemovedFromLobbyReason.Lobby_Destroyed_Game_Started; case ELobbyDestroyedReason.Chat_Channel_Creation_Failure: case ELobbyDestroyedReason.Chat_Channel_Join_Failure: return ERemovedFromLobbyReason.Unable_To_Join_Chat_Channel; } return ERemovedFromLobbyReason.Unknown; }
public void Shutdown_Lobby( ELobbyID lobby_id, ELobbyDestroyedReason reason ) { CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Shutting down lobby {0} for reason {1}.", Get_Lobby_Log_Description( lobby_id ), reason.ToString() ) ); CServerLobby lobby = Get_Lobby( lobby_id ); if ( lobby == null ) { return; } if ( lobby.IsPublic ) { CServerLobbyBrowserManager.Instance.Notify_Browsers_Of_Removed_Lobby( lobby_id ); } List< EPersistenceID > members = new List< EPersistenceID >( lobby.MemberIDs ); members.Apply( member => Remove_From_Lobby( lobby.ID, member, Compute_Removal_Reason( reason ) ) ); if ( lobby.ChatChannel != EChannelID.Invalid ) { CDestroyChatChannelServerMessage destroy_channel_message = new CDestroyChatChannelServerMessage( lobby.ChatChannel ); CServerMessageRouter.Send_Message_To_Chat_Server( destroy_channel_message ); } m_Lobbies.Remove( lobby_id ); m_LobbiesByCreator.Remove( lobby.Creator ); }