using System.Net.Sockets;
using NewLife.Log;
using NewLife.Model;
namespace NewLife.Net;
/// <summary>基础Socket接口</summary>
/// <remarks>
/// <para>封装所有基础接口的共有特性!</para>
/// <para>核心设计理念:事件驱动,接口统一,简单易用!</para>
/// <para>异常处理理念:确保主流程简单易用,特殊情况的异常通过事件处理!</para>
/// <para>继承自 <see cref="IDisposable2"/>、<see cref="ILogFeature"/>、<see cref="ITracerFeature"/>,具备完整的生命周期管理、日志和追踪能力。</para>
/// </remarks>
public interface ISocket : IDisposable2, ILogFeature, ITracerFeature
{
#region 属性
/// <summary>名称</summary>
/// <remarks>主要用于日志输出和调试识别</remarks>
String Name { get; set; }
/// <summary>基础Socket对象</summary>
/// <remarks>底层的Socket实例,可用于高级操作</remarks>
Socket? Client { get; }
/// <summary>本地地址</summary>
/// <remarks>指定Socket绑定的本地网络地址,包含协议类型、IP地址和端口</remarks>
NetUri Local { get; set; }
/// <summary>端口</summary>
/// <remarks>本地监听或绑定的端口号,0表示由系统自动分配</remarks>
Int32 Port { get; set; }
/// <summary>是否输出发送日志</summary>
/// <remarks>默认false,启用后会在日志中输出发送的数据内容</remarks>
Boolean LogSend { get; set; }
/// <summary>是否输出接收日志</summary>
/// <remarks>默认false,启用后会在日志中输出接收的数据内容</remarks>
Boolean LogReceive { get; set; }
#endregion
#region 方法
/// <summary>输出日志</summary>
/// <remarks>日志输出时自动加上前缀标识</remarks>
/// <param name="format">格式化字符串</param>
/// <param name="args">格式化参数</param>
void WriteLog(String format, params Object?[] args);
#endregion
#region 事件
/// <summary>错误发生/断开连接时</summary>
/// <remarks>发生网络错误或连接断开时触发,事件参数包含错误动作和异常信息</remarks>
event EventHandler<ExceptionEventArgs> Error;
#endregion
}
|