From ce1292c9cf37195b6abd2699dfc5d6cb3e143c9b Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期日, 12 四月 2026 23:38:19 +0800
Subject: [PATCH] feat(MES): 添加MES接口相关实体和DTO JS扩展文件至JSX格式并更新配置
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs | 79 +++++++++++++++++++++++----------------
1 files changed, 46 insertions(+), 33 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs
index f59a31e..8f7e705 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs
@@ -10,10 +10,13 @@
public partial class TcpSocketServer
{
/// <summary>
- /// 检索当前在服务中注册的所有客户端标识符的只读列表。
+ /// 鑾峰彇鎵�鏈夊凡杩炴帴瀹㈡埛绔� ID 鍒楄〃
/// </summary>
- /// <remarks>返回的列表表示调用时刻客户端ID的快照。后续对客户端集合的更改不会影响返回的列表。此方法是线程安全的。</remarks>
- /// <returns>包含客户端ID的<see cref="IReadOnlyList{String}"/>。如果没有客户端注册,列表将为空。</returns>
+ /// <remarks>
+ /// 杩斿洖褰撳墠鍦ㄦ湇鍔″櫒娉ㄥ唽鐨勫鎴风鏍囪瘑鍒楄〃銆�
+ /// 杩欐槸涓�涓彧璇诲垪琛ㄧ殑蹇収锛岀嚎绋嬪畨鍏ㄣ��
+ /// </remarks>
+ /// <returns>瀹㈡埛绔� ID 鍒楄〃</returns>
public IReadOnlyList<string> GetClientIds()
{
lock (_syncRoot)
@@ -23,11 +26,13 @@
}
/// <summary>
- /// 检索与指定设备标识符关联的客户端标识符。
+ /// 鏍规嵁璁惧 ID 鑾峰彇瀹㈡埛绔� ID
/// </summary>
- /// <remarks>此方法是线程安全的。如果未找到设备标识符,方法将返回null而不是抛出异常。</remarks>
- /// <param name="deviceId">要检索客户端标识符的设备的唯一标识符。不能为null。</param>
- /// <returns>与指定设备标识符关联的客户端标识符,如果不存在关联则返回null。</returns>
+ /// <remarks>
+ /// 鍦ㄨ澶囩粦瀹氳〃涓煡鎵惧搴旂殑瀹㈡埛绔� ID銆�
+ /// </remarks>
+ /// <param name="deviceId">璁惧鍞竴鏍囪瘑</param>
+ /// <returns>瀹㈡埛绔� ID锛屽鏋滄湭鎵惧埌鍒欒繑鍥� null</returns>
public string? GetClientIdByDevice(string deviceId)
{
lock (_syncRoot)
@@ -37,13 +42,15 @@
}
/// <summary>
- /// 异步向指定设备发送消息。
+ /// 寮傛鍚戞寚瀹氳澶囧彂閫佹秷鎭�
/// </summary>
- /// <remarks>如果指定设备未注册或无法找到,则返回 <see langword="false"/>。</remarks>
- /// <param name="deviceId">目标设备的唯一标识符。不能为null或空。</param>
- /// <param name="message">要发送给设备的消息。不能为null。</param>
- /// <returns>表示异步操作的任务。如果消息成功发送,任务结果为 <see langword="true"/>;
- /// 否则为 <see langword="false"/>。</returns>
+ /// <remarks>
+ /// 閫氳繃璁惧 ID 鏌ユ壘瀵瑰簲鐨勫鎴风杩炴帴锛岀劧鍚庡彂閫佹秷鎭��
+ /// 濡傛灉璁惧鏈敞鍐屾垨杩炴帴涓嶅瓨鍦紝杩斿洖 false銆�
+ /// </remarks>
+ /// <param name="deviceId">鐩爣璁惧鍞竴鏍囪瘑</param>
+ /// <param name="message">瑕佸彂閫佺殑娑堟伅</param>
+ /// <returns>鍙戦�佹槸鍚︽垚鍔�</returns>
public Task<bool> SendToDeviceAsync(string deviceId, string message)
{
var clientId = GetClientIdByDevice(deviceId);
@@ -52,15 +59,16 @@
}
/// <summary>
- /// 通过TCP连接异步向指定客户端发送带帧的文本消息。
+ /// 寮傛鍚戞寚瀹氬鎴风鍙戦�佹秷鎭�
/// </summary>
- /// <remarks>如果客户端未连接或不存在,此方法将返回 <see langword="false"/> 且不发送消息。
- /// 消息将优先使用客户端首选的文本编码进行编码;否则使用默认编码。
- /// 此方法对于向不同客户端的并发调用是线程安全的。</remarks>
- /// <param name="clientId">要发送消息到的客户端的唯一标识符。必须对应已连接的客户端。</param>
- /// <param name="message">要发送给客户端的文本消息。不能为null。</param>
- /// <returns>表示异步操作的任务。如果消息成功发送,任务结果为 <see langword="true"/>;
- /// 否则,如果客户端未连接或不存在,结果为 <see langword="false"/>。</returns>
+ /// <remarks>
+ /// 浣跨敤甯ф牸寮忓彂閫佹秷鎭紙娣诲姞澶村熬鏍囪瘑锛夈��
+ /// 姣忎釜瀹㈡埛绔殑鍙戦�佹搷浣滄槸浜掓枼鐨勶紙閫氳繃淇″彿閲忓疄鐜帮級銆�
+ /// 濡傛灉瀹㈡埛绔湭杩炴帴鎴栦笉瀛樺湪锛屽彂閫佸け璐ヨ繑鍥� false銆�
+ /// </remarks>
+ /// <param name="clientId">鐩爣瀹㈡埛绔� ID</param>
+ /// <param name="message">瑕佸彂閫佺殑娑堟伅</param>
+ /// <returns>鍙戦�佹槸鍚︽垚鍔�</returns>
public async Task<bool> SendToClientAsync(string clientId, string message)
{
TcpClient? client;
@@ -80,9 +88,11 @@
enc ??= _textEncoding;
+ // 鑾峰彇瀹㈡埛绔彂閫侀攣
if (sem != null) await sem.WaitAsync();
try
{
+ // 鍙戦�佹秷鎭�
var ns = client.GetStream();
var framedMessage = BuildFramedMessage(message);
var data = enc.GetBytes(framedMessage);
@@ -96,12 +106,13 @@
}
/// <summary>
- /// 异步向所有已连接的客户端发送指定的消息。
+ /// 寮傛骞挎挱娑堟伅鍒版墍鏈夊鎴风
/// </summary>
- /// <remarks>如果向某个客户端发送消息时发生错误,异常将被抑制并继续向其他客户端广播。
- /// 当所有发送操作完成后,此方法结束。</remarks>
- /// <param name="message">要广播给所有客户端的消息。不能为null。</param>
- /// <returns>表示异步广播操作的任务。</returns>
+ /// <remarks>
+ /// 灏嗘秷鎭彂閫佺粰鎵�鏈夊凡杩炴帴鐨勫鎴风銆�
+ /// 濡傛灉鏌愪釜瀹㈡埛绔彂閫佸け璐ワ紝涓嶅奖鍝嶅叾浠栧鎴风鐨勫彂閫併��
+ /// </remarks>
+ /// <param name="message">瑕佸箍鎾殑娑堟伅</param>
public async Task BroadcastAsync(string message)
{
List<TcpClient> clients;
@@ -110,6 +121,7 @@
clients = _clients.Values.ToList();
}
+ // 骞惰鍙戦�佹秷鎭埌鎵�鏈夊鎴风
await Task.WhenAll(clients.Select(c => Task.Run(async () =>
{
try { await SendMessageAsync(c, message); } catch { }
@@ -117,14 +129,15 @@
}
/// <summary>
- /// 通过网络流异步向指定的TCP客户端发送带帧的文本消息。
+ /// 閫氳繃 NetworkStream 鍙戦�佹秷鎭�
/// </summary>
- /// <remarks>如果客户端为null或未连接,此方法将立即返回而不发送消息。
- /// 消息将使用配置的文本编码进行编码并添加帧头后通过网络流发送。</remarks>
- /// <param name="client">要发送消息到的TCP客户端。必须处于连接状态;否则方法不执行任何操作。</param>
- /// <param name="message">要发送给客户端的文本消息。消息在传输前将被编码并添加帧头。</param>
- /// <returns>表示异步发送操作的任务。</returns>
- private async Task SendMessageAsync(TcpClient client, string message)
+ /// <remarks>
+ /// 鐩存帴浣跨敤 TcpClient 鐨� NetworkStream 鍙戦�佹秷鎭��
+ /// 娑堟伅浼氭坊鍔犲抚澶村抚灏俱��
+ /// </remarks>
+ /// <param name="client">TCP 瀹㈡埛绔�</param>
+ /// <param name="message">娑堟伅鍐呭</param>
+ public async Task SendMessageAsync(TcpClient client, string message)
{
if (client == null || !client.Connected)
{
--
Gitblit v1.9.3