using UnityEngine; using Mirror; using System; public class ClientMessageHandler : MonoBehaviour { public static ClientMessageHandler Instance; void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public void RegisterHandler() { NetworkClient.RegisterHandler(OnServerMessageReceived); } public void UnregisterHandler() { NetworkClient.UnregisterHandler(); } void OnServerMessageReceived(GameMessage msg) { Debug.Log($"收到 Server 訊息: {msg.action} {msg.payload}"); try { switch (msg.action) { case "welcome": { switch(msg.payload) { case "hello": Debug.Log("Welcome 訊息驗證成功"); // clean data ClientWorkMessageHandleSceneController.cleanData(); ClientWorkMessageHandleSceneController.messageResultCount = 0; ClientLastWordsSceneController.words = ""; if (ClientHomeWaittingSceneController.Instance != null) { ClientHomeWaittingSceneController.Instance.OnWelcomeMessageReceived(); } break; } } break; case "workMessageResult": { if (ClientWorkMessageHandleSceneController.Instance != null) { GameMessageWorkResult resultObj = JsonUtility.FromJson(msg.payload); ClientWorkMessageHandleSceneController.messageResultCount = resultObj.count; if (resultObj != null) { ClientWorkMessageHandleSceneController.Instance.onReceiveResult(resultObj.result, resultObj.resultText); } else { Debug.LogError("workMessaggeResult failed"); } } } break; case "gameFinalWords": { if (string.IsNullOrEmpty(ClientLastWordsSceneController.words)) { ClientLastWordsSceneController.words = msg.payload; if (ClientGameBackToRealSceneController.Instance) { StartCoroutine( ClientGameBackToRealSceneController.Instance.LoadNextScene()); } } } break; case "gameTalkingStart": { if (ClientGameTalkingSceneController.Instance) { ClientGameTalkingSceneController.Instance.processStep(2); } } break; case "gameTalkingGodSay": { if (ClientGameTalkingSceneController.Instance) { ClientGameTalkingSceneController.Instance.onReceivedChatMessage(msg.payload); } } break; } } catch (Exception e) { Debug.LogError($"解析 JSON 失敗: {e.Message}"); } } public void SendMessageToServer(string action, string message) { if (NetworkClient.isConnected) { GameMessage msg = new GameMessage { action = action, payload = message }; NetworkClient.Send(msg); Debug.Log($"發送訊息到 Server: {message}"); } else { Debug.LogError($"發送訊息到 Server 失敗: {message}"); } } }