From 0a6698d14daa665825b47f97c78642d33ebdda63 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 27 三月 2026 12:08:20 +0800
Subject: [PATCH] feat(RouterService): 新增 GetAllRoutersFromCache 私有方法
---
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