Пример #1
0
 protected void RaiseClientDisconnectedEvent(ITcpClientAgent agent)
 {
     if (this.ClientDisconnectedEvent != null)
     {
         this.ClientDisconnectedEvent(this, new TcpClientDisconnectedArgs(agent));
     }
 }
Пример #2
0
        private void listener_ClientEstablishedEvent(TcpClient client)
        {
            ITcpClientAgent agent = CreateClientAgent(client);

            this.clients.Add(agent);
            this.RaiseClientConnectedEvent(agent);
        }
Пример #3
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);
        }
Пример #4
0
 /// <summary>
 /// 从<see cref="TcpClientAgent"/>获取TcpClientConnectedEventArgs的新实例。
 /// </summary>
 /// <param name="clientAgent">此事件的客户端代理。</param>
 public TcpClientDisconnectedArgs(ITcpClientAgent clientAgent) : base(clientAgent)
 {
 }
Пример #5
0
 /// <summary>
 /// 从<see cref="TcpClientAgent"/>获取TcpClientConnectedEventArgs的新实例。
 /// </summary>
 /// <param name="clientAgent">此事件的客户端代理。</param>
 public TcpClientConnectedEventArgs(ITcpClientAgent clientAgent) : base(clientAgent)
 {
 }
Пример #6
0
 /// <summary>
 /// 从<see cref="ClientAgent"/>获取RemoteClientEventArgs的新实例。
 /// </summary>
 /// <param name="clientAgent">此事件的客户端代理。</param>
 public RemoteClientEventArgs(ITcpClientAgent clientAgent)
 {
     this.ClientAgent = clientAgent;
 }