// Construction public CChatPlayer( EPersistenceID persistence_id, ESessionID session_id, string name, List< EPersistenceID > ignore_list ) { PersistenceID = persistence_id; SessionID = session_id; Name = name; ignore_list.ShallowCopy( m_IgnoreList ); }
// Construction public CConnection( ESessionID id ) { ID = id; m_IncomingReader = new BinaryReader( m_IncomingMessageStream ); Connected = false; PendingDisconnectReason = EDisconnectReason.Invalid; }
// Construction public CConnectedPlayer( EPersistenceID persistence_id, ESessionID session_id, string name ) { PersistenceID = persistence_id; SessionID = session_id; Name = name; LobbyID = ELobbyID.Invalid; MatchID = EMatchInstanceID.Invalid; State = EConnectedPlayerState.Chat_Idle; ConnectionState = EConnectedPlayerConnectionState.Connecting; }
// Construction public CDisconnectRequestOperation( ESessionID id, EDisconnectReason reason ) : base(ENetworkOperation.Disconnect, id) { Reason = reason; }
// Construction public CConnectRequestOperation( IPEndPoint connection_endpoint, ESessionID id, string name ) : base(ENetworkOperation.Connect, id) { Endpoint = connection_endpoint; Name = name; }
public void Resume( ESessionID new_id ) { SessionID = new_id; ConnectionState = EConnectedPlayerConnectionState.Connecting; }
// Kinda ugly, but otherwise no way to start a message send from CRShared; override in the appropriate places on client/server public virtual void Send_Message( CNetworkMessage message, ESessionID destination_id ) { }
private EPersistenceID Get_Persistence_ID_By_Session_ID( ESessionID session_id ) { EPersistenceID persistence_id = EPersistenceID.Invalid; m_ActiveSessions.TryGetValue( session_id, out persistence_id ); return persistence_id; }
// 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 ); } }
private void On_Query_Player_Info_Request( CQueryPlayerInfoRequest request, ESessionID source_session ) { CQueryPlayerInfoResponse response = new CQueryPlayerInfoResponse( request.RequestID ); foreach ( var id in request.IDs ) { CConnectedPlayer player = Get_Active_Player_By_Persistence_ID( id ); if ( player != null ) { CPlayerInfo player_info = new CPlayerInfo( id ); player_info.Name = player.Name; response.Add_Player_Info( player_info ); } } Send_Message( response, source_session ); }
public void Add_Connected_Player( ESessionID session_id, EPersistenceID persistence_id, CClientHelloRequest request ) { if ( Get_Player_By_Session_ID( session_id ) != null ) { Send_Message( new CClientHelloResponse( request.RequestID, EConnectRefusalReason.Name_Already_Connected ), session_id ); Add_Network_Operation( new CDisconnectRequestOperation( session_id, EDisconnectReason.Server_Request ) ); return; } if ( Get_Active_Player_By_Persistence_ID( persistence_id ) != null ) { Send_Message( new CClientHelloResponse( request.RequestID, EConnectRefusalReason.Name_Already_Connected ), session_id ); Add_Network_Operation( new CDisconnectRequestOperation( session_id, EDisconnectReason.Server_Request ) ); return; } CPersistentPlayerData player_data = CDatabaseProxy.Instance.Get_Player_Data( persistence_id ); if ( player_data == null ) { Send_Message( new CClientHelloResponse( request.RequestID, EConnectRefusalReason.Internal_Persistence_Error ), session_id ); Add_Network_Operation( new CDisconnectRequestOperation( session_id, EDisconnectReason.Server_Request ) ); return; } CConnectedPlayer player = null; if ( m_SuspendedPlayers.TryGetValue( persistence_id, out player ) ) { m_SuspendedPlayers.Remove( persistence_id ); m_ConnectedPlayers.Add( persistence_id, player ); player.Resume( session_id ); CServerResource.Output_Text( EServerTextID.Server_Player_Reconnected_Notice, player.Name ); CLog.Log( ELoggingChannel.Logic, ELogLevel.Low, CServerResource.Get_Text( EServerTextID.Server_Player_Reconnected_Notice, player.Name ) ); } else { player = new CConnectedPlayer( persistence_id, session_id, request.Name ); m_ConnectedPlayers.Add( persistence_id, player ); CServerResource.Output_Text( EServerTextID.Server_Player_Connected_Notice, player.Name ); CLog.Log( ELoggingChannel.Logic, ELogLevel.Low, CServerResource.Get_Text( EServerTextID.Server_Player_Connected_Notice, player.Name ) ); } m_ActiveSessions.Add( session_id, persistence_id ); // add to chat CAsyncBackendOperations.New_Player_Announce_To_Chat( player, player_data, request.RequestID ); }
public void Suspend_Connected_Player( ESessionID session_id ) { CConnectedPlayer player = Get_Player_By_Session_ID( session_id ); if ( player != null ) { m_ConnectedPlayers.Remove( player.PersistenceID ); player.Suspend(); CServerLobbyBrowserManager.Instance.Stop_Browsing( player.PersistenceID ); m_SuspendedPlayers.Add( player.PersistenceID, player ); m_ActiveSessions.Remove( session_id ); Send_Message( new CRemovePlayerFromChatServerMessage( session_id ), ESessionID.Loopback ); CServerResource.Output_Text( EServerTextID.Server_Player_Linkdead_Notice, player.Name ); CLog.Log( ELoggingChannel.Logic, ELogLevel.Low, CServerResource.Get_Text( EServerTextID.Server_Player_Linkdead_Notice, player.Name ) ); } }
public void Send_Message( CNetworkMessage message, ESessionID destination_id ) { CServerLogicalThread.Instance.Send_Message( message, destination_id ); }
public void Remove_Connected_Player( ESessionID session_id ) { CConnectedPlayer player = Get_Player_By_Session_ID( session_id ); if ( player != null ) { Detach_Player_From_Game_Systems( player.PersistenceID ); m_ConnectedPlayers.Remove( player.PersistenceID ); m_ActiveSessions.Remove( session_id ); Send_Message( new CRemovePlayerFromChatServerMessage( session_id ), ESessionID.Loopback ); CServerResource.Output_Text( EServerTextID.Server_Player_Removed_Notice, player.Name ); } }
public bool Is_Connection_Valid( ESessionID session_id ) { return m_ActiveSessions.ContainsKey( session_id ); }
public EPersistenceID Get_Player_ID_By_Session_ID( ESessionID session_id ) { EPersistenceID persistence_id = EPersistenceID.Invalid; if ( !m_ActiveSessions.TryGetValue( session_id, out persistence_id ) ) { return EPersistenceID.Invalid; } return persistence_id; }
public CConnectedPlayer Get_Player_By_Session_ID( ESessionID session_id ) { EPersistenceID persistence_id = EPersistenceID.Invalid; if ( !m_ActiveSessions.TryGetValue( session_id, out persistence_id ) ) { return null; } CConnectedPlayer player = null; if ( !m_ConnectedPlayers.TryGetValue( persistence_id, out player ) ) { return null; } return player; }
private void Handle_Client_Hello_Request( CClientHelloRequest message, ESessionID session_id ) { CGetPlayerDataPersistenceRequest get_data_request = new CGetPlayerDataPersistenceRequest( message.Name ); get_data_request.Handler = delegate( CPersistenceResponse response ) { CGetPlayerDataPersistenceResponse get_data_response = response as CGetPlayerDataPersistenceResponse; EPersistenceID player_id = get_data_response.PlayerData.ID; CConnectedPlayerManager.Instance.Add_Connected_Player( session_id, player_id, message ); }; CDatabaseProxy.Instance.Submit_Request( get_data_request ); }
private void Handle_Disconnection_Request( CDisconnectRequestMessage message, ESessionID session_id ) { CConnectedPlayerManager.Instance.Remove_Connected_Player( session_id ); Add_Network_Operation( new CDisconnectRequestOperation( session_id, EDisconnectReason.Client_Request ) ); }
// Construction public CRemovePlayerFromChatServerMessage( ESessionID session_id ) : base() { SessionID = session_id; }
public static void Send_Message_To_Session( CNetworkMessage message, ESessionID session_id ) { CServerLogicalThread.Instance.Send_Message( message, session_id ); }
// Construction public CAnnouncePlayerToChatServerRequest( ESessionID session_id, EPersistenceID persistence_id, string name, List< EPersistenceID > ignore_list ) : base() { SessionID = session_id; PersistenceID = persistence_id; Name = name; IgnoreList = new List< EPersistenceID >(); ignore_list.ShallowCopy( IgnoreList ); }
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 Remove_Player( ESessionID session_id ) { CChatPlayer player = Get_Player_By_Session_ID( session_id ); if ( player == null ) { return; } List< EChannelID > channels = player.Channels.ToList(); channels.Apply( channel_id => Remove_From_Channel( player.PersistenceID, channel_id, ELeftChannelReason.Player_Logoff, EPersistenceID.Invalid ) ); m_ActiveSessions.Remove( player.SessionID ); m_Players.Remove( player.PersistenceID ); m_PlayersByName.Remove( player.Name.ToUpper() ); CLog.Log( ELoggingChannel.Chat, ELogLevel.Medium, String.Format( "Player {0} on session {1} removed from chat server.", player.Name, (int) session_id ) ); }
private CChatPlayer Get_Player_By_Session_ID( ESessionID session_id ) { EPersistenceID persistence_id = EPersistenceID.Invalid; if ( !m_ActiveSessions.TryGetValue( session_id, out persistence_id ) ) { return null; } return Get_Player_By_Persistence_ID( persistence_id ); }
public void Add_Message( CNetworkMessage message, ESessionID destination_id ) { m_CurrentNetworkFrame.Add_Message( message, destination_id ); }
private bool Announce_Player( ESessionID session_id, EPersistenceID persistence_id, string name, List< EPersistenceID > ignore_list ) { if ( Get_Player_By_Session_ID( session_id ) != null || Get_Player_By_Persistence_ID( persistence_id ) != null ) { return false; } CChatPlayer new_player = new CChatPlayer( persistence_id, session_id, name, ignore_list ); m_Players.Add( persistence_id, new_player ); m_ActiveSessions.Add( session_id, persistence_id ); m_PlayersByName.Add( name.ToUpper(), persistence_id ); return true; }
// Construction public CNetworkOperation( ENetworkOperation op, ESessionID id ) { NetworkOp = op; ID = id; }
public override void Send_Message( CNetworkMessage message, ESessionID destination_id ) { Add_Message( message, destination_id ); }
// Construction public CServerConnection( ESessionID id ) : base(id) { }