using System.Net.Sockets;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_Tasks.Workflow.Abstractions;
|
|
namespace WIDESEAWCS_Tasks.SocketServer
|
{
|
/// <summary>
|
/// 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);
|
}
|
}
|
}
|