using System; using System.Net; using System.Net.Sockets; namespace Curtain.Net.Sockets.PLC { /// /// 服务端Session /// [Serializable] public class ServerSession { /// /// SessionID /// public string ID { get; private set; } = "S-" + Guid.NewGuid().ToString("N"); [NonSerialized] private IPEndPoint _IPEndPoint = null; /// /// 此连接对象连接的远程客户端 /// public IPEndPoint IPEndPoint { get { return _IPEndPoint; } internal set { _IPEndPoint = value; } } /// /// IP地址 /// public IPAddress IPAddress { get { return _IPEndPoint?.Address; } } /// /// 服务端IP /// public string IP { get { return _IPEndPoint?.Address?.ToString(); } } /// /// 服务端端口 /// public int? Port { get { return _IPEndPoint?.Port; } } /// /// 挂起连接队列的最大长度 /// public int Backlog { get; internal set; } [NonSerialized] private Socket _Socket = null; /// /// 传输数据的对象 /// public Socket Socket { get { return _Socket; } internal set { _Socket = value; } } /// /// 清除Session /// public void Clear() { //IPAddress = null; Socket = null; } /// /// ToString /// /// public override string ToString() { return $"[{_IPEndPoint}]:({ID})"; } } /// /// 客户端Session /// [Serializable] public class ClientSession { /// /// SessionID /// public string ID { get; private set; } = "C-" + Guid.NewGuid().ToString("N"); /// /// 服务端Session /// public ServerSession Server { get; internal set; } [NonSerialized] private Socket _socket = null; /// /// 传输数据的对象 /// public Socket Socket { get { return _socket; } internal set { _socket = value; } } //internal SimpleHybirdLock HybirdLockSend //{ // get; set; //} [NonSerialized] private IPEndPoint _IPEndPoint = null; /// /// 此连接对象连接的远程客户端 /// public IPEndPoint IPEndPoint { get { return _IPEndPoint; } internal set { _IPEndPoint = value; } } /// /// IP地址 /// public IPAddress IPAddress { get { return _IPEndPoint?.Address; } } /// /// 客户端IP /// public string IP { get { return _IPEndPoint?.Address?.ToString(); } } /// /// 客户端端口 /// public int? Port { get { return _IPEndPoint?.Port; } } ///// ///// 远程对象的别名 ///// //public string LoginAlias //{ // get; set; //} ///// ///// 心跳验证的时间点 ///// //public DateTime HeartTime { get; set; } = DateTime.Now; ///// ///// 客户端的类型 ///// //public string ClientType //{ // get; set; //} /// /// 清除Session /// public void Clear() { Server = null; Socket = null; } /// /// ToString /// /// public override string ToString() { return $"[{_IPEndPoint}]:({ID})"; } } /// /// 数据接收Session /// [Serializable] public class ReceiveSession { /// /// SessionID /// public string ID { get; private set; } = "R-" + Guid.NewGuid().ToString("N"); /// /// 服务端Socket /// public SocketServer ServerSocket { get; internal set; } /// /// 客户端Session /// public ClientSession Client { get; internal set; } /// /// 响应报文-头 /// public string Head { get; set; } /// /// 响应报文-文本 /// public string Content { get; set; } /// /// 响应报文-头 /// [NonSerialized] public byte[] HeadBytes; /// /// 响应报文-文本 /// [NonSerialized] public byte[] ContentBytes; /// /// 报文命令 /// public string Command { get; set; } /// /// 已接收数据长度 /// public int Offset { get; set; } /// /// 总接收数据长度 /// public int Size { get; set; } /// /// 清除Session /// public void Clear() { } /// /// 回复消息 /// /// public virtual void ReturnMessage(string message) { ServerSocket?.ReturnMessage(this, message); } /// /// ToString /// /// public override string ToString() { return $"Command[{Command}]:Head[{Head}]:Content[{Content}]:Client[{Client}]"; } } }