/// <summary> /// Constructor /// </summary> /// <param name="ReadArgs">The Tcp Client connection</param> public GpcmClient(GamespyTcpStream ConnectionStream, long ConnectionId) { // Set default variable values PlayerNick = "Connecting..."; PlayerId = 0; RemoteEndPoint = (IPEndPoint)ConnectionStream.RemoteEndPoint; Disposed = false; Status = LoginStatus.Connected; // Set the connection ID this.ConnectionId = ConnectionId; // Create our Client Stream Stream = ConnectionStream; Stream.OnDisconnect += Stream_OnDisconnect; Stream.DataReceived += Stream_DataReceived; Stream.BeginReceive(); }
/// <summary> /// When a new connection is established, we the parent class are responsible /// for handling the processing /// </summary> /// <param name="Stream">A GamespyTcpStream object that wraps the I/O AsyncEventArgs and socket</param> protected override void ProcessAccept(GamespyTcpStream Stream) { try { // Convert the TcpClient to a MasterClient GpspClient client = new GpspClient(Stream); Clients.TryAdd(client.ConnectionId, client); // Begin accepting data now that we are fully connected Stream.BeginReceive(); } catch (Exception e) { L.LogError("WARNING: An Error occured at [Gpsp.ProcessAccept] : Generating Exception Log"); ExceptionHandler.GenerateExceptionLog(e); base.Release(Stream); } }
/// <summary> /// Accepts a TcpClient, and begin the serverlist fetching process for the client. /// This method is executed when the user updates his server browser ingame /// </summary> protected override void ProcessAccept(GamespyTcpStream Stream) { // End the operation and display the received data on // the console. try { // Convert the TcpClient to a MasterClient MasterClient client = new MasterClient(Stream); Clients.TryAdd(client.ConnectionId, client); // Begin accepting data now that we are fully connected Stream.BeginReceive(); } catch (Exception e) { Program.ErrorLog.Write("WARNING: An Error occured at [MstrServer.AcceptClient] : Generating Exception Log"); ExceptionHandler.GenerateExceptionLog(e); base.Release(Stream); } }
/// <summary> /// When a new connection is established, we the parent class are responsible /// for handling the processing /// </summary> /// <param name="Stream">A GamespyTcpStream object that wraps the I/O AsyncEventArgs and socket</param> protected override void ProcessAccept(GamespyTcpStream Stream) { // Get our connection id long ConID = Interlocked.Increment(ref ConnectionCounter); GpspClient client; try { // Convert the TcpClient to a MasterClient client = new GpspClient(Stream, ConID); Clients.TryAdd(ConID, client); // Start receiving data Stream.BeginReceive(); } catch { // Remove pending connection Clients.TryRemove(ConID, out client); } }
/// <summary> /// Accepts a TcpClient, and begin the serverlist fetching process for the client. /// This method is executed when the user updates his server browser ingame /// </summary> protected override void ProcessAccept(GamespyTcpStream Stream) { // Get our connection id long ConID = Interlocked.Increment(ref ConnectionCounter); MasterClient client; // End the operation and display the received data on // the console. try { // Convert the TcpClient to a MasterClient client = new MasterClient(Stream, ConID); Clients.TryAdd(client.ConnectionID, client); // Start receiving data Stream.BeginReceive(); } catch (ObjectDisposedException) // Ignore { // Remove client Clients.TryRemove(ConID, out client); } catch (IOException) // Connection closed before a TcpClientStream could be made { // Remove client Clients.TryRemove(ConID, out client); } catch (Exception e) { // Remove client Clients.TryRemove(ConID, out client); // Report error Program.ErrorLog.Write("NOTICE: An Error occured at [MstrServer.AcceptClient] : Generating Exception Log"); ExceptionHandler.GenerateExceptionLog(e); } }