From f63b50d2bc896399f3575f630fc34b84d58a5b2d Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Wed, 3 Sep 2025 17:43:55 +0800 Subject: [PATCH] =?UTF-8?q?202509031743=20TCPServer=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TCPServer.cs | 76 ++++++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 56 deletions(-) diff --git a/TCPServer.cs b/TCPServer.cs index ea3fa80..3c8d5b8 100644 --- a/TCPServer.cs +++ b/TCPServer.cs @@ -81,17 +81,11 @@ namespace DualScreenDemo string request = Encoding.UTF8.GetString(buffer, 0, bytesRead).Trim(); Console.WriteLine("Received: " + request); - - // 先判斷是否是 Chat 指令 (格式帶有 ",") - if (request.Contains(",")) - await HandleChatCommand(request, stream); - else if (request.Length >= 5) + + if (request.Length >= 5) { - string requestHostSuffix = request.Substring(0, 3); - string command = request.Substring(4); - - if (requestHostSuffix.Equals(hostNameSuffix, StringComparison.OrdinalIgnoreCase)) - await HandleRoomCommand(command, stream); + if (request.Substring(0, 3).Equals(hostNameSuffix, StringComparison.OrdinalIgnoreCase)) + await HandleRoomCommand(request, stream); else await HandleOverlayCommand(request, stream); } @@ -109,11 +103,15 @@ namespace DualScreenDemo // ================================ // 房間控制指令 // ================================ - private async Task HandleRoomCommand(string command, NetworkStream stream) + private async Task HandleRoomCommand(string request ,NetworkStream stream) { - switch (command.ToLowerInvariant()) + string[] parts = request.Split(',', 3); // 最多拆三段 + string cmdPrefix = parts[0].Trim(); + string cmd = parts[1].Trim().ToLowerInvariant(); + string content = parts.Length > 2 ? parts[2] : ""; + switch (cmd) { - case "X": + case "x": _ = SafeInvoke(VideoPlayerForm.Instance, async () => { _room.set("closed"); @@ -122,11 +120,11 @@ namespace DualScreenDemo }); break; - case "O": + case "o": _room.set("active"); break; - case "F": + case "f": _ = SafeInvoke(PrimaryForm.Instance, () => _room.set("fire")); break; @@ -189,9 +187,15 @@ namespace DualScreenDemo case "raise_key": SendSerialCommand(new byte[] { 0xA2, 0xB1, 0xA4 }); break; + case "send-sticker": + _ = SafeInvoke(OverlayForm.MainForm, () => OnDisplaySticker?.Invoke(content)); + break; + case "message": + _ = SafeInvoke(OverlayForm.MainForm, () => OnDisplayBarrage?.Invoke(content)); + break; default: - Console.WriteLine($"[Unknown Command] {command}"); + Console.WriteLine($"[Unknown Command] {request}"); break; } @@ -223,46 +227,6 @@ namespace DualScreenDemo await SendOkResponse(stream); } - // ================================ - // Chat 指令 (send-sticker, message) - // ================================ - private async Task HandleChatCommand(string message, NetworkStream stream) - { - try - { - string[] parts = message.Split(',', 2); // 只切一次 - if (parts.Length < 2) - { - Console.WriteLine($"[ChatCommand Error] 格式錯誤: {message}"); - return; - } - - string cmd = parts[0].Trim().ToLowerInvariant(); - string content = parts[1].Trim(); - - switch (cmd) - { - case "send-sticker": - _ = SafeInvoke(OverlayForm.MainForm, () => OnDisplaySticker?.Invoke(content)); - break; - - case "message": - _ = SafeInvoke(OverlayForm.MainForm, () => OnDisplayBarrage?.Invoke(content) ); - break; - - default: - Console.WriteLine($"[Unknown ChatCommand] {cmd}"); - break; - } - - await SendOkResponse(stream); - } - catch (Exception ex) - { - Console.WriteLine($"[ChatCommand Error] {ex.Message}"); - } - } - // ================================ // 輔助方法 // ================================