202509031743

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

View File

@ -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}");
}
}
// ================================
// 輔助方法
// ================================