public void LoopClients() { AckClientsThread = new Thread(delegate() { while (_isRunning) { try { foreach (IConnection MainConnection in MainConnectionsDict.Values.ToList()) { send(((int)DataHandler.eDataType.INFO).ToString(), ((int)DataHandler.eOrderType.START).ToString(), MainConnection.tcpClient); if ((DateTime.Now - MainConnection.LastChecked) > TimeSpan.FromMilliseconds(CheckIsConnectedInterval_ms)) { MainConnectionsDict.Remove((MainConnection.tcpClient.Client.RemoteEndPoint as IPEndPoint).Address.ToString()); //Console.WriteLine(MainConnection.LastChecked); //Console.WriteLine(DateTime.Now); //foreach (IConnection fc in MainConnection.FeatureClients.Values.ToList()) //{ // fc.F = null; // fc.tcpClient.Client.Disconnect(false); // FeatureConnectionsMapDict.Remove(fc.tcpClient.Client.RemoteEndPoint.ToString()); //} MainConnection.tcpClient.Client.Disconnect(false); } } } catch (Exception ex) { Console.WriteLine("Broadcast Exception: " + ex.Message); } Thread.Sleep(CheckIsConnectedInterval_ms); } }); AckClientsThread.Start(); Console.WriteLine("TCP Server Started"); while (_isRunning) { try { Console.WriteLine("Waiting for Clients"); TcpClient newClient = _server.AcceptTcpClient(); // TcpClient newClient = newClient0.Clone // client found. // create a thread to handle communication Thread t = new Thread(new ParameterizedThreadStart(ClientHandler)); t.Start(newClient); } catch { Console.WriteLine("TCP Server Stopped"); _isRunning = false; break; } } }
public void clientDisconnected(TcpClient c) { try { if (MainConnectionsDict.ContainsKey((c.Client.RemoteEndPoint as IPEndPoint).Address.ToString())) { foreach (IFeature fc in getMainConnectionByIP(c.Client.RemoteEndPoint.ToString()).Features.Values.ToList()) { getMainConnectionByIP(c.Client.RemoteEndPoint.ToString()).Features.Remove(fc.DATA_TYPE); fc.Dispose(); } MainConnectionsDict.Remove((c.Client.RemoteEndPoint as IPEndPoint).Address.ToString()); c.Client.Disconnect(false); } } catch { Console.WriteLine("Disconnect Exception"); } }