202509031743
TCPServer 修正
This commit is contained in:
parent
d3de8284f9
commit
f63b50d2bc
74
TCPServer.cs
74
TCPServer.cs
@ -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}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
// 輔助方法
|
// 輔助方法
|
||||||
// ================================
|
// ================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user