| | |
| | | namespace WIDESEAWCS_Tasks.SocketServer |
| | | { |
| | | /// <summary> |
| | | /// TcpSocketServer 的适配器实现,保持底层行为不变,仅做访问收口。 |
| | | /// TcpSocketServer 的网关实现 |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// 实现 ISocketClientGateway 接口,将底层 TCP 通信细节封装。 |
| | | /// 使业务层不直接依赖 TcpSocketServer,便于单元测试和替换实现。 |
| | | /// </remarks> |
| | | public class SocketClientGateway : ISocketClientGateway |
| | | { |
| | | /// <summary> |
| | | /// TCP Socket 服务器实例 |
| | | /// </summary> |
| | | private readonly TcpSocketServer _tcpSocket; |
| | | |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | /// <param name="tcpSocket">TCP Socket 服务器实例</param> |
| | | public SocketClientGateway(TcpSocketServer tcpSocket) |
| | | { |
| | | _tcpSocket = tcpSocket; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 异步发送消息到指定客户端 |
| | | /// </summary> |
| | | /// <param name="clientId">目标客户端 ID</param> |
| | | /// <param name="message">消息内容</param> |
| | | /// <returns>发送是否成功</returns> |
| | | public Task<bool> SendToClientAsync(string clientId, string message) |
| | | { |
| | | return _tcpSocket.SendToClientAsync(clientId, message); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 通过 TcpClient 发送消息 |
| | | /// </summary> |
| | | /// <param name="client">TCP 客户端连接</param> |
| | | /// <param name="message">消息内容</param> |
| | | public Task SendMessageAsync(TcpClient client, string message) |
| | | { |
| | | return _tcpSocket.SendMessageAsync(client, message); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取所有已连接客户端 ID |
| | | /// </summary> |
| | | /// <returns>客户端 ID 列表</returns> |
| | | public IReadOnlyList<string> GetClientIds() |
| | | { |
| | | return _tcpSocket.GetClientIds(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 处理客户端连接的消息循环 |
| | | /// </summary> |
| | | /// <param name="client">TCP 客户端连接</param> |
| | | /// <param name="clientId">客户端 ID</param> |
| | | /// <param name="cancellationToken">取消令牌</param> |
| | | /// <param name="robotCrane">机器人状态</param> |
| | | /// <returns>任务</returns> |
| | | public Task HandleClientAsync(TcpClient client, string clientId, CancellationToken cancellationToken, RobotSocketState robotCrane) |
| | | { |
| | | return _tcpSocket.HandleClientAsync(client, clientId, cancellationToken, robotCrane); |
| | | } |
| | | } |
| | | } |
| | | |