From 73905dea456af423049753fff10a853d7394ece7 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期日, 12 四月 2026 20:40:25 +0800
Subject: [PATCH] feat(WMS): 新增dispatchTasksToWCS.vue批量下发弹窗组件 - 工具栏按钮触发弹窗 - 表格展示选中任务,可编辑地址和优先级 - 非可下发状态任务行标红且不可编辑 - 显示下发失败任务列表

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs |   67 +++++++++++++++++++++++++++++++--
 1 files changed, 63 insertions(+), 4 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 9654ae2..8f7e705 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SocketServer/TcpSocketServer.Clients.cs
@@ -9,6 +9,14 @@
 {
     public partial class TcpSocketServer
     {
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊凡杩炴帴瀹㈡埛绔� ID 鍒楄〃
+        /// </summary>
+        /// <remarks>
+        /// 杩斿洖褰撳墠鍦ㄦ湇鍔″櫒娉ㄥ唽鐨勫鎴风鏍囪瘑鍒楄〃銆�
+        /// 杩欐槸涓�涓彧璇诲垪琛ㄧ殑蹇収锛岀嚎绋嬪畨鍏ㄣ��
+        /// </remarks>
+        /// <returns>瀹㈡埛绔� ID 鍒楄〃</returns>
         public IReadOnlyList<string> GetClientIds()
         {
             lock (_syncRoot)
@@ -17,6 +25,14 @@
             }
         }
 
+        /// <summary>
+        /// 鏍规嵁璁惧 ID 鑾峰彇瀹㈡埛绔� ID
+        /// </summary>
+        /// <remarks>
+        /// 鍦ㄨ澶囩粦瀹氳〃涓煡鎵惧搴旂殑瀹㈡埛绔� ID銆�
+        /// </remarks>
+        /// <param name="deviceId">璁惧鍞竴鏍囪瘑</param>
+        /// <returns>瀹㈡埛绔� ID锛屽鏋滄湭鎵惧埌鍒欒繑鍥� null</returns>
         public string? GetClientIdByDevice(string deviceId)
         {
             lock (_syncRoot)
@@ -25,6 +41,16 @@
             }
         }
 
+        /// <summary>
+        /// 寮傛鍚戞寚瀹氳澶囧彂閫佹秷鎭�
+        /// </summary>
+        /// <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);
@@ -32,6 +58,17 @@
             return SendToClientAsync(clientId, message);
         }
 
+        /// <summary>
+        /// 寮傛鍚戞寚瀹氬鎴风鍙戦�佹秷鎭�
+        /// </summary>
+        /// <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;
@@ -51,11 +88,14 @@
 
             enc ??= _textEncoding;
 
+            // 鑾峰彇瀹㈡埛绔彂閫侀攣
             if (sem != null) await sem.WaitAsync();
             try
             {
+                // 鍙戦�佹秷鎭�
                 var ns = client.GetStream();
-                var data = enc.GetBytes((message ?? string.Empty) + "\n");
+                var framedMessage = BuildFramedMessage(message);
+                var data = enc.GetBytes(framedMessage);
                 await ns.WriteAsync(data, 0, data.Length);
             }
             finally
@@ -65,6 +105,14 @@
             return true;
         }
 
+        /// <summary>
+        /// 寮傛骞挎挱娑堟伅鍒版墍鏈夊鎴风
+        /// </summary>
+        /// <remarks>
+        /// 灏嗘秷鎭彂閫佺粰鎵�鏈夊凡杩炴帴鐨勫鎴风銆�
+        /// 濡傛灉鏌愪釜瀹㈡埛绔彂閫佸け璐ワ紝涓嶅奖鍝嶅叾浠栧鎴风鐨勫彂閫併��
+        /// </remarks>
+        /// <param name="message">瑕佸箍鎾殑娑堟伅</param>
         public async Task BroadcastAsync(string message)
         {
             List<TcpClient> clients;
@@ -73,13 +121,23 @@
                 clients = _clients.Values.ToList();
             }
 
+            // 骞惰鍙戦�佹秷鎭埌鎵�鏈夊鎴风
             await Task.WhenAll(clients.Select(c => Task.Run(async () =>
             {
-                try { await SendAsync(c, message); } catch { }
+                try { await SendMessageAsync(c, message); } catch { }
             })));
         }
 
-        public static async Task SendAsync(TcpClient client, string message)
+        /// <summary>
+        /// 閫氳繃 NetworkStream 鍙戦�佹秷鎭�
+        /// </summary>
+        /// <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)
             {
@@ -87,7 +145,8 @@
             }
 
             NetworkStream stream = client.GetStream();
-            var data = Encoding.UTF8.GetBytes((message ?? string.Empty) + "\n");
+            var framedMessage = BuildFramedMessage(message);
+            var data = _textEncoding.GetBytes(framedMessage);
             await stream.WriteAsync(data, 0, data.Length);
         }
     }

--
Gitblit v1.9.3