/// <summary> /// This method is used internally to notify server about the client disconnection /// </summary> internal void NotifyClientDisconnection(ProxyServerConnection connection) { lock (SyncRoot) { // Remove the existing connection from the list Connections.Remove(connection); } }
/// <summary> /// Processes all incoming requests /// </summary> private void _RequestListener() { try { while (!StopRequested) { if (ListenerSocket.Pending()) { try { Log("Connection received"); // Accept the connection TcpClient newConnection = ListenerSocket.AcceptTcpClient(); //Log("Connection accepted"); // Start a new connection ProxyServerConnection proxyConnection = new ProxyServerConnection(newConnection, this); proxyConnection.Start(); // Registering new connection lock (SyncRoot) { Connections.Add(proxyConnection); } } catch (Exception ex) { Log(ex.ToString()); } } else { // Pause a bit Thread.Sleep(10); } } } catch (Exception ex) { Log(ex.ToString()); } Log("Stopping the server..."); // Stop the server ListenerSocket.Stop(); ListenerSocket = null; Log("Waiting for client connections to terminate..."); // Wait for connections int connectionsLeft = Int16.MaxValue; while (connectionsLeft > 0) { lock (SyncRoot) { // Check the amount of connections left connectionsLeft = Connections.Count; } // Wait a bit Thread.Sleep(10); } Log("Server is stopped"); }