ClientState.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using System.Net.Sockets;
  3. namespace SWRIS.Models
  4. {
  5. public class ClientState
  6. {
  7. public string SerialNo { get; set; }
  8. public string IpAddress { get; }
  9. public Socket ClientSocket { get; set; }
  10. public byte[] Buffer { get; set; }
  11. public ByteCircularBuffer ReceiveBuffer { get; set; } = new ByteCircularBuffer(32768); // 添加环形缓冲区
  12. public DateTime LastActiveTime { get; set; } = DateTime.UtcNow;
  13. /// <summary>
  14. /// 最近一次收到有效数据(心跳包或业务数据包)的时间,从未收到过为 DateTime.MinValue
  15. /// </summary>
  16. public DateTime LastDataReceivedTime { get; set; } = DateTime.MinValue;
  17. /// <summary>
  18. /// 数据激活状态:数据超时窗口内收到过有效数据。
  19. /// 用于区分"链路在收发数据但心跳缺失"与"链路真正静默",
  20. /// 避免设备在持续上报实时数据时被判为离线。
  21. /// </summary>
  22. public bool IsDataActive { get; set; }
  23. /// <summary>
  24. /// 客户端是否已关闭,避免重复触发断开事件
  25. /// </summary>
  26. public bool IsClosed { get; set; }
  27. public ClientState(Socket clientSocket, string ipAddress, string serialNo)
  28. {
  29. ClientSocket = clientSocket;
  30. IpAddress = ipAddress;
  31. SerialNo = serialNo;
  32. Buffer = new byte[8192];
  33. }
  34. public ClientState(Socket clientSocket, string ipAddress)
  35. {
  36. ClientSocket = clientSocket;
  37. IpAddress = ipAddress;
  38. Buffer = new byte[8192];
  39. }
  40. }
  41. }