202509031743

TCPServer 修正
This commit is contained in:
allen.yan 2025-09-03 17:43:55 +08:00
parent d3de8284f9
commit f63b50d2bc

View File

@ -82,16 +82,10 @@ namespace DualScreenDemo
string request = Encoding.UTF8.GetString(buffer, 0, bytesRead).Trim(); string request = Encoding.UTF8.GetString(buffer, 0, bytesRead).Trim();
Console.WriteLine("Received: " + request); Console.WriteLine("Received: " + request);
// 先判斷是否是 Chat 指令 (格式帶有 ",") if (request.Length >= 5)
if (request.Contains(","))
await HandleChatCommand(request, stream);
else if (request.Length >= 5)
{ {
string requestHostSuffix = request.Substring(0, 3); if (request.Substring(0, 3).Equals(hostNameSuffix, StringComparison.OrdinalIgnoreCase))
string command = request.Substring(4); await HandleRoomCommand(request, stream);
if (requestHostSuffix.Equals(hostNameSuffix, StringComparison.OrdinalIgnoreCase))
await HandleRoomCommand(command, stream);
else else
await HandleOverlayCommand(request, stream); 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 () => _ = SafeInvoke(VideoPlayerForm.Instance, async () =>
{ {
_room.set("closed"); _room.set("closed");
@ -122,11 +120,11 @@ namespace DualScreenDemo
}); });
break; break;
case "O": case "o":
_room.set("active"); _room.set("active");
break; break;
case "F": case "f":
_ = SafeInvoke(PrimaryForm.Instance, () => _room.set("fire")); _ = SafeInvoke(PrimaryForm.Instance, () => _room.set("fire"));
break; break;
@ -189,9 +187,15 @@ namespace DualScreenDemo
case "raise_key": case "raise_key":
SendSerialCommand(new byte[] { 0xA2, 0xB1, 0xA4 }); SendSerialCommand(new byte[] { 0xA2, 0xB1, 0xA4 });
break; break;
case "send-sticker":
_ = SafeInvoke(OverlayForm.MainForm, () => OnDisplaySticker?.Invoke(content));
break;
case "message":
_ = SafeInvoke(OverlayForm.MainForm, () => OnDisplayBarrage?.Invoke(content));
break;
default: default:
Console.WriteLine($"[Unknown Command] {command}"); Console.WriteLine($"[Unknown Command] {request}");
break; break;
} }
@ -223,46 +227,6 @@ namespace DualScreenDemo
await SendOkResponse(stream); 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}");
}
}
// ================================ // ================================
// 輔助方法 // 輔助方法
// ================================ // ================================