Petition-to-the-Gods-V3/Assets/Scripts/The2ndScreen/The2ndScreenMessageHandler.cs

126 lines
4.5 KiB
C#

using Mirror;
using System;
using UnityEngine;
public class The2ndScreenMessageHandler : MonoBehaviour
{
public static The2ndScreenMessageHandler Instance;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void UnregisterHandler()
{
NetworkClient.UnregisterHandler<GameMessage>();
}
public void RegisterHandler()
{
NetworkClient.RegisterHandler<GameMessage>(OnServerMessageReceived);
}
private void OnServerMessageReceived(GameMessage msg)
{
try
{
Debug.Log($"收到 Server 訊息: {msg.action} {msg.payload}");
switch (msg.action)
{
case "welcome":
if (The2ndScreenInitSceneController.Instance)
{
The2ndScreenInitSceneController.Instance.OnReceivedWelcome();
}
break;
case "The2ndScreenServer":
{
if (The2ndScreenServerSceneController.Instance)
{
switch(msg.payload)
{
case "0":
The2ndScreenServerSceneController.Instance.processQueueStep(0);
break;
case "1":
The2ndScreenServerSceneController.Instance.processQueueStep(1);
break;
case "2":
The2ndScreenServerSceneController.Instance.processQueueStep(2);
break;
case "3":
The2ndScreenServerSceneController.Instance.processQueueStep(3);
break;
case "4":
The2ndScreenServerSceneController.Instance.processQueueStep(4);
break;
case "5":
The2ndScreenServerSceneController.Instance.processQueueStep(5);
break;
}
}
}
break;
case "The2ndScreenClient":
if (The2ndScreenClientSceneController.Instance)
{
switch (msg.payload)
{
case "0":
The2ndScreenClientSceneController.Instance.processQueueStep(0);
break;
case "1":
The2ndScreenClientSceneController.Instance.processQueueStep(1);
break;
case "2":
The2ndScreenClientSceneController.Instance.processQueueStep(2);
break;
case "3":
The2ndScreenClientSceneController.Instance.processQueueStep(3);
break;
case "4":
The2ndScreenClientSceneController.Instance.processQueueStep(4);
break;
case "5":
The2ndScreenClientSceneController.Instance.processQueueStep(5);
break;
case "6":
The2ndScreenClientSceneController.Instance.processQueueStep(6);
break;
}
}
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}");
}
}
}