128 lines
4.3 KiB
C#
128 lines
4.3 KiB
C#
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<GameMessage>(OnServerMessageReceived);
|
|
}
|
|
public void UnregisterHandler()
|
|
{
|
|
NetworkClient.UnregisterHandler<GameMessage>();
|
|
}
|
|
|
|
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<GameMessageWorkResult>(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}");
|
|
}
|
|
}
|
|
}
|