using System;
using System.Net.Sockets;
namespace SWRIS.Models
{
public class ClientState
{
public string SerialNo { get; set; }
public string IpAddress { get; }
public Socket ClientSocket { get; set; }
public byte[] Buffer { get; set; }
public ByteCircularBuffer ReceiveBuffer { get; set; } = new ByteCircularBuffer(32768); // 添加环形缓冲区
public DateTime LastActiveTime { get; set; } = DateTime.UtcNow;
///
/// 最近一次收到有效数据(心跳包或业务数据包)的时间,从未收到过为 DateTime.MinValue
///
public DateTime LastDataReceivedTime { get; set; } = DateTime.MinValue;
///
/// 数据激活状态:数据超时窗口内收到过有效数据。
/// 用于区分"链路在收发数据但心跳缺失"与"链路真正静默",
/// 避免设备在持续上报实时数据时被判为离线。
///
public bool IsDataActive { get; set; }
///
/// 客户端是否已关闭,避免重复触发断开事件
///
public bool IsClosed { get; set; }
public ClientState(Socket clientSocket, string ipAddress, string serialNo)
{
ClientSocket = clientSocket;
IpAddress = ipAddress;
SerialNo = serialNo;
Buffer = new byte[8192];
}
public ClientState(Socket clientSocket, string ipAddress)
{
ClientSocket = clientSocket;
IpAddress = ipAddress;
Buffer = new byte[8192];
}
}
}