示例#1
0
文件: TCPServer.cs 项目: Engma90/Remo
        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;
                }
            }
        }
示例#2
0
文件: TCPServer.cs 项目: Engma90/Remo
        public override IConnection getMainConnectionByIP(String ip)
        {
            ip = ip.Split(':')[0];
            IConnection ret;

            MainConnectionsDict.TryGetValue(ip, out ret);
            return(ret);
        }
示例#3
0
文件: TCPServer.cs 项目: Engma90/Remo
 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"); }
 }