using linker.libs;
using System.Net;
namespace linker.tunnel.connection
{
///
/// 隧道协议
///
[Flags]
public enum TunnelProtocolType : byte
{
None = 0,
Tcp = 1,
Udp = 2,
Quic = 4,
}
///
/// 隧道模式
///
public enum TunnelMode : byte
{
Client = 0,
Server = 1,
}
///
/// 隧道类型
///
public enum TunnelType : byte
{
P2P = 0,
Relay = 1,
}
///
/// 隧道方向
///
public enum TunnelDirection : byte
{
///
/// 正向连接
///
Forward = 0,
///
/// 反向连接
///
Reverse = 1
}
public interface ITunnelConnectionReceiveCallback
{
///
/// 收到隧道数据包
///
///
///
///
///
public Task Receive(ITunnelConnection connection, ReadOnlyMemory data, object state);
///
/// 收到隧道关闭
///
///
///
///
public Task Closed(ITunnelConnection connection, object state);
}
///
/// 隧道连接对象
///
public interface ITunnelConnection
{
///
/// 对方id
///
public string RemoteMachineId { get; }
///
/// 对方名称
///
public string RemoteMachineName { get; }
///
/// 事务
///
public string TransactionId { get; }
///
/// 协议
///
public string TransportName { get; }
///
/// 描述
///
public string Label { get; }
///
/// 隧道模式
///
public TunnelMode Mode { get; }
///
/// 隧道类型
///
public TunnelType Type { get; }
///
/// 协议
///
public TunnelProtocolType ProtocolType { get; }
///
/// 隧道方向
///
public TunnelDirection Direction { get; }
///
/// 对方IP
///
public IPEndPoint IPEndPoint { get; }
///
/// 是否SSL
///
public bool SSL { get; }
///
/// 缓冲区大小
///
public byte BufferSize { get; }
///
/// 已连接
///
public bool Connected { get; }
///
/// 延迟
///
public int Delay { get; }
///
/// 已发送字节数
///
public long SendBytes { get; }
///
/// 已接受字节数
///
public long ReceiveBytes { get; }
///
/// 最后通信时间
///
public LastTicksManager LastTicks { get; }
///
/// 发送ping
///
///
public Task SendPing();
///
/// 发送数据
///
///
///
public Task SendAsync(ReadOnlyMemory data);
///
/// 开始接收数据
///
/// 收到数据的回调
/// 自定义数据,回调带上
/// 是否分包
public void BeginReceive(ITunnelConnectionReceiveCallback callback, object userToken, bool framing = true);
///
/// 关闭隧道
///
public void Dispose();
public string ToString();
public bool Equals(ITunnelConnection connection);
}
}