// Player ops public static void Join_General_Channel( EPersistenceID player_id, EMessageRequestID client_request_id ) { ESessionID session_id = CConnectedPlayerManager.Instance.Get_Active_Player_Session_ID( player_id ); Change_System_Channel( player_id, CConnectedPlayerManager.Instance.GeneralChatChannel, EChannelGameProperties.OrdinarySingletonMask, delegate( CResponseMessage response ) { On_Join_General_Channel_Response( response, session_id, client_request_id ); } ); }
// Construction public CKickPlayerFromLobbyResponse( EMessageRequestID request_id, EKickPlayerFromLobbyError reason ) : base(request_id) { Reason = reason; }
// Construction public CIgnorePlayerResponse( EMessageRequestID request_id, EPersistenceID ignored_id, EIgnorePlayerResult result ) : base(request_id) { IgnoredID = ignored_id; Result = result; }
// Construction public CContinueMatchResponse( EMessageRequestID request_id, EContinueMatchFailure error ) : base(request_id) { Error = error; }
// Player Ops private static void On_Chat_Server_Announce_Response( CResponseMessage response, ESessionID session_id, EMessageRequestID client_request_id ) { if ( !CConnectedPlayerManager.Instance.Is_Connection_Valid( session_id ) ) { return; } CAnnouncePlayerToChatServerResponse message = response as CAnnouncePlayerToChatServerResponse; CAnnouncePlayerToChatServerRequest request = message.Request as CAnnouncePlayerToChatServerRequest; CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Active_Player_By_Persistence_ID( request.PersistenceID ); if ( player != null ) { CConnectedPlayerManager.Instance.On_Chat_Server_Announce_Response( player, message.Success, client_request_id ); } }
// Construction public CCreateChatChannelResponseServerMessage( EMessageRequestID request_id ) : base(request_id) { }
// Construction public CLeaveMatchResponse( EMessageRequestID request_id, ELeaveMatchFailureError error ) : base(request_id) { Error = error; }
private void On_Unignore_Persistence_Return( CPersistenceResponse response, EMessageRequestID request_id, EPersistenceID source_player ) { CRemoveIgnoredPlayerPersistenceResponse unignore_response = response as CRemoveIgnoredPlayerPersistenceResponse; if ( unignore_response.Error != EPersistenceError.None ) { CServerMessageRouter.Send_Message_To_Player( new CUnignorePlayerResponse( request_id, EPersistenceID.Invalid, EUnignorePlayerResult.Persistence_Error ), source_player ); return; } if ( unignore_response.Result != EUnignorePlayerResult.Success ) { CServerMessageRouter.Send_Message_To_Player( new CUnignorePlayerResponse( request_id, EPersistenceID.Invalid, unignore_response.Result ), source_player ); return; } CServerMessageRouter.Send_Message_To_Chat_Server( new CRemovePlayerFromChatIgnoreListServerMessage( source_player, unignore_response.IgnoredPlayerID ) ); CServerMessageRouter.Send_Message_To_Player( new CUnignorePlayerResponse( request_id, unignore_response.IgnoredPlayerID, EUnignorePlayerResult.Success ), source_player ); CServerLobby lobby = CServerLobbyManager.Instance.Get_Lobby_By_Creator( source_player ); if ( lobby != null && lobby.IsPublic ) { CServerLobbyBrowserManager.Instance.Notify_Browser_Of_Lobby_Unban_Or_Unignore( unignore_response.IgnoredPlayerID, lobby.ID ); } }
// Construction public CQueryPlayerInfoResponse( EMessageRequestID request_id ) : base(request_id) { Infos = new List< CPlayerInfo >(); }
public void On_Chat_Server_Announce_Response( CConnectedPlayer player, bool success, EMessageRequestID hello_request_id ) { ESessionID session_id = player.SessionID; if ( success == false ) { Send_Message( new CClientHelloResponse( hello_request_id, EConnectRefusalReason.Unable_To_Announce_To_Chat_Server ), session_id ); Add_Network_Operation( new CDisconnectRequestOperation( session_id, EDisconnectReason.Server_Request ) ); } else { Join_Required_Channel_On_Connect( player.PersistenceID, hello_request_id ); } }
private void Join_Required_Channel_On_Connect( EPersistenceID player_id, EMessageRequestID hello_request_id ) { CConnectedPlayer player = Get_Player_By_Persistence_ID( player_id ); switch ( player.State ) { case EConnectedPlayerState.Chat_Idle: CAsyncBackendOperations.Join_General_Channel( player_id, hello_request_id ); break; case EConnectedPlayerState.Lobby_Idle: CServerMessageRouter.Send_Message_To_Session( new CClientHelloResponse( hello_request_id, CDatabaseProxy.Instance.Get_Player_Data( player_id ) ), player.SessionID ); player.Set_Connected(); CServerLobbyManager.Instance.On_Player_Reconnect( player_id, player.LobbyID ); break; case EConnectedPlayerState.Game_Idle: CServerMessageRouter.Send_Message_To_Session( new CClientHelloResponse( hello_request_id, CDatabaseProxy.Instance.Get_Player_Data( player_id ) ), player.SessionID ); player.Set_Connected(); CServerMatchInstanceManager.Instance.On_Player_Reconnect( player_id, player.MatchID ); break; case EConnectedPlayerState.Lobby_Browsing: case EConnectedPlayerState.Lobby_Matching: throw new CApplicationException( "Player in an impossible state on reconnection" ); } }
// Construction public CLobbyStartMatchResponse( EMessageRequestID request_id, EStartMatchError error ) : base(request_id) { Error = error; }
// Construction public CLobbyChangeGameCountResponse( EMessageRequestID request_id, ELobbyChangeGameCountError error ) : base(request_id) { Error = error; }
// Construction public CLeaveLobbyResponse( EMessageRequestID request_id, ELeaveLobbyFailureReason reason ) : base(request_id) { Reason = reason; }
private void On_Join_Lobby_Success( EPersistenceID player_id, EMessageRequestID request_id, ELobbyID lobby_id ) { CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id ); player.On_Join_Lobby_Success( lobby_id ); CServerLobby lobby = Get_Lobby( lobby_id ); CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Player {0} successfully joined lobby {1}.", player.Name, lobby.GameDescription ) ); CJoinLobbySuccess join_response = new CJoinLobbySuccess( request_id, lobby.Clone_State() ); CServerMessageRouter.Send_Message_To_Player( join_response, player_id ); ELobbyMemberType member_type; uint member_index; lobby.Get_Member_Info( player_id, out member_index, out member_type ); CLobbyMemberJoinedOperation op = new CLobbyMemberJoinedOperation( player_id, player.Name, member_type, member_index ); Send_Message_To_Members( lobby_id, new CLobbyOperationMessage( op ), player_id ); }
// Construction public CClientHelloResponse( EMessageRequestID request_id, CPersistentPlayerData player_data ) : base(request_id) { PlayerData = player_data.Clone(); Reason = EConnectRefusalReason.None; }
// Construction public CAnnouncePlayerToChatServerResponse( EMessageRequestID request_id, bool success ) : base(request_id) { Success = success; }
public CClientHelloResponse( EMessageRequestID request_id, EConnectRefusalReason reason ) : base(request_id) { Reason = reason; }
// Construction public CJoinChatChannelResponseServerMessage( EMessageRequestID request_id, EChannelJoinError error ) : base(request_id) { Error = error; }
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 CMatchTakeTurnResponse( EMessageRequestID request_id, EGameActionFailure error ) : base(request_id) { Error = error; }
private void Join_Lobby_Aux( EPersistenceID player_id, CServerLobby lobby, EMessageRequestID request_id, string password ) { CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Active_Player_By_Persistence_ID( player_id ); if ( player == null ) { throw new CApplicationException( "Processing a join request by an inactive player" ); } if ( !player.State_Allows_Operation( EConnectedPlayerOperation.Join_Lobby ) ) { On_Join_Lobby_Failure( ELobbyID.Invalid, player_id, request_id, EJoinLobbyFailureReason.Invalid_State_To_Join ); return; } EJoinLobbyFailureReason join_check_result = lobby.Check_Join( player_id ); if ( join_check_result != EJoinLobbyFailureReason.None ) { On_Join_Lobby_Failure( lobby.ID, player_id, request_id, join_check_result ); return; } CServerLobbyBrowserManager.Instance.Stop_Browsing( player_id ); lobby.Add_Member( player_id ); On_Join_Lobby_Success( player_id, request_id, lobby.ID ); if ( lobby.ChatChannel != EChannelID.Invalid ) { CAsyncBackendOperations.Player_Join_Lobby_Channel( player.PersistenceID, lobby.ID, lobby.ChatChannel ); } }
public static void New_Player_Announce_To_Chat( CConnectedPlayer player, CPersistentPlayerData player_data, EMessageRequestID client_request_id ) { ESessionID session_id = player.SessionID; CAnnouncePlayerToChatServerRequest announce_request = new CAnnouncePlayerToChatServerRequest( session_id, player.PersistenceID, player.Name, player_data.IgnoreList ); announce_request.Handler = delegate( CResponseMessage response ) { On_Chat_Server_Announce_Response( response, session_id, client_request_id ); }; CServerMessageRouter.Send_Message_To_Chat_Server( announce_request ); }
private void On_Create_Lobby_Failure( ELobbyID lobby_id, EPersistenceID player_id, EMessageRequestID request_id, ECreateLobbyFailureReason reason ) { CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "{0}'s lobby {1} failed to create because {2}.", CConnectedPlayerManager.Get_Player_Log_Name( player_id ), Get_Lobby_Log_Description( lobby_id ), reason.ToString() ) ); Shutdown_Lobby( lobby_id, ELobbyDestroyedReason.Creation_Failure ); CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id ); if ( player != null ) { player.Change_State( EConnectedPlayerState.Chat_Idle ); } if ( !CConnectedPlayerManager.Instance.Is_Connected( player_id ) ) { return; } CCreateLobbyFailure create_response = new CCreateLobbyFailure( request_id, reason ); CServerMessageRouter.Send_Message_To_Player( create_response, player_id ); }
private static void On_Join_General_Channel_Response( CResponseMessage response, ESessionID session_id, EMessageRequestID client_request_id ) { if ( !CConnectedPlayerManager.Instance.Is_Connection_Valid( session_id ) ) { return; } CJoinChatChannelResponseServerMessage message = response as CJoinChatChannelResponseServerMessage; CJoinChatChannelRequestServerMessage request = message.Request as CJoinChatChannelRequestServerMessage; EPersistenceID player_id = request.PlayerID; CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Active_Player_By_Persistence_ID( player_id ); if ( player != null ) { player.On_Join_General_Channel_Response( message.Error, client_request_id ); } }
private void On_Create_Lobby_Success( EPersistenceID player_id, EMessageRequestID request_id, ELobbyID lobby_id ) { CServerLobby lobby = Get_Lobby( lobby_id ); CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id ); player.On_Join_Lobby_Success( lobby_id ); CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Player {0}'s lobby {1} successfully created.", player.Name, lobby.GameDescription ) ); CCreateLobbySuccess create_response = new CCreateLobbySuccess( request_id, lobby.Clone_State() ); CServerMessageRouter.Send_Message_To_Player( create_response, player_id ); if ( lobby.IsPublic ) { CServerLobbyBrowserManager.Instance.Notify_Browsers_Of_New_Lobby( lobby_id ); } }
// Construction public CStartBrowseLobbyResponse( EMessageRequestID request_id, EStartBrowseResult result ) : base(request_id) { Result = result; LobbySummaries = new List< CLobbySummary >(); }
private void On_Join_Lobby_Failure( ELobbyID lobby_id, EPersistenceID player_id, EMessageRequestID request_id, EJoinLobbyFailureReason reason ) { CLog.Log( ELoggingChannel.Lobby, ELogLevel.Medium, String.Format( "Player {0} failed to join lobby {1} because of {2}.", CConnectedPlayerManager.Get_Player_Log_Name( player_id ), Get_Lobby_Log_Description( lobby_id ), reason.ToString() ) ); CConnectedPlayer player = CConnectedPlayerManager.Instance.Get_Player_By_Persistence_ID( player_id ); if ( player != null ) { player.Change_State( EConnectedPlayerState.Chat_Idle ); } if ( !CConnectedPlayerManager.Instance.Is_Connected( player_id ) ) { return; } CJoinLobbyFailure join_response = new CJoinLobbyFailure( request_id, reason ); CServerMessageRouter.Send_Message_To_Player( join_response, player_id ); }
// Construction public CPlayerTellResponse( EMessageRequestID request_id ) : base(request_id) { }
// Construction public CJoinLobbySuccess( EMessageRequestID request_id, CLobbyState lobby_state ) : base(request_id) { LobbyState = lobby_state; }