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}]";
}
}
}