using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace KTVApp { public class TcpServer { private TcpListener _listener; private bool _isRunning; // 添加事件来通知接收到的消息 // 保留原有的消息事件 public event Action MessageReceived; // 添加新的命令事件 public event Action CommandReceived; public TcpServer(int port) { _listener = new TcpListener(IPAddress.Any, port); } public void Start() { _isRunning = true; _listener.Start(); ListenForClients(); } public void Stop() { _isRunning = false; _listener.Stop(); } private async void ListenForClients() { while (_isRunning) { try { var client = await _listener.AcceptTcpClientAsync(); HandleClient(client); } catch (Exception ex) { Console.WriteLine($"Error accepting client: {ex.Message}"); } } } private async Task HandleClient(TcpClient client) { Console.WriteLine("客戶端已連接"); using NetworkStream stream = client.GetStream(); try { byte[] buffer = new byte[1024]; while (true) { Array.Clear(buffer, 0, buffer.Length); int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length); if (bytesRead == 0) break; string message = Encoding.UTF8.GetString(buffer, 0, bytesRead).Trim(); Console.WriteLine($"收到訊息: {message}"); // 解析消息 ParseAndExecuteCommand(message); // 回傳確認訊息 byte[] responseBuffer = Encoding.UTF8.GetBytes("OK"); await stream.WriteAsync(responseBuffer, 0, responseBuffer.Length); } } catch (Exception ex) { Console.WriteLine($"發生錯誤: {ex.Message}"); } finally { Console.WriteLine("連接完成"); } } private void ParseAndExecuteCommand(string message) { try { string[] parts = message.Split(','); if (parts.Length >= 2) { string roomNumber = parts[0]; string command = parts[1]; // 觸發兩個事件 MessageReceived?.Invoke(message); // 原有的事件 CommandReceived?.Invoke(roomNumber, command); // 新的命令事件 } } catch (Exception ex) { Console.WriteLine($"解析命令時發生錯誤: {ex.Message}"); } } } }