protected void RaiseClientDisconnectedEvent(ITcpClientAgent agent) { if (this.ClientDisconnectedEvent != null) { this.ClientDisconnectedEvent(this, new TcpClientDisconnectedArgs(agent)); } }
private void listener_ClientEstablishedEvent(TcpClient client) { ITcpClientAgent agent = CreateClientAgent(client); this.clients.Add(agent); this.RaiseClientConnectedEvent(agent); }
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); }
/// <summary> /// 从<see cref="TcpClientAgent"/>获取TcpClientConnectedEventArgs的新实例。 /// </summary> /// <param name="clientAgent">此事件的客户端代理。</param> public TcpClientDisconnectedArgs(ITcpClientAgent clientAgent) : base(clientAgent) { }
/// <summary> /// 从<see cref="TcpClientAgent"/>获取TcpClientConnectedEventArgs的新实例。 /// </summary> /// <param name="clientAgent">此事件的客户端代理。</param> public TcpClientConnectedEventArgs(ITcpClientAgent clientAgent) : base(clientAgent) { }
/// <summary> /// 从<see cref="ClientAgent"/>获取RemoteClientEventArgs的新实例。 /// </summary> /// <param name="clientAgent">此事件的客户端代理。</param> public RemoteClientEventArgs(ITcpClientAgent clientAgent) { this.ClientAgent = clientAgent; }