Ejemplo n.º 1
0
        protected override bool EngineTask()
        {
            try
            {
                for (int i = this.clients.Count - 1; i >= 0; i--)
                {
                    ITcpClientAgent client = this.clients[i];
                    List <byte>     data   = new List <byte>();

                    if (!client.CanRead || !client.CanWrite || !client.Connected)
                    {
                        this.clients.Remove(client);
                        client.NotifyDisconnected();
                        client.Close();
                        this.RaiseClientDisconnectedEvent(client);
                        continue;
                    }

                    if (client.DataAvailable)
                    {
                        client.Read();
                    }
                    client.Schedule();

                    try
                    {
                        client.WriteEmptyByte(); //尝试写入一个空字节,以测试连接的可用性。
                    }
                    catch (Exception)
                    {
                        RaiseClientDisconnectedEvent(client);
                        client.NotifyDisconnected();
                        client.Dispose();
                        this.clients.Remove(client);
                    }
                }
            }
            catch (Exception exp)
            {
                Logger.TxtLogger.SingleInstance.LogWithTime(exp.Message);
            }
            return(true);
        }