using System.Net.Sockets; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks.Workflow.Abstractions { /// /// Socket 客户端网关接口 - 封装 TcpSocketServer 的访问,使业务层不直接依赖底层通信实现 /// /// /// 该接口是业务层与底层 TCP 通信之间的抽象层。 /// 通过依赖注入和使用接口,使上层代码不直接依赖 TcpSocketServer, /// 便于后续替换通信实现或进行单元测试。 /// public interface ISocketClientGateway { /// /// 异步发送消息到指定客户端 /// /// 目标客户端的 IP 地址 /// 要发送的消息内容 /// 发送是否成功 Task SendToClientAsync(string clientId, string message); /// /// 通过 TcpClient 对象发送消息 /// /// /// 与 SendToClientAsync 的区别:此方法直接使用 TcpClient 对象, /// 适用于需要回写响应给发送方的场景。 /// /// TCP 客户端连接对象 /// 要发送的消息内容 Task SendMessageAsync(TcpClient client, string message); /// /// 获取所有已连接客户端的 ID 列表 /// /// 客户端 IP 地址列表 IReadOnlyList GetClientIds(); /// /// 异步处理客户端连接的消息循环 /// /// /// 启动后会持续接收客户端消息,直到连接断开或取消令牌被触发。 /// 用于管理单个客户端的生命周期。 /// /// TCP 客户端连接 /// 客户端标识(通常是 IP 地址) /// 取消令牌 /// 机器人状态对象 Task HandleClientAsync(TcpClient client, string clientId, CancellationToken cancellationToken, RobotSocketState robotCrane); } }