Petition-to-the-Gods-V3/Assets/Scripts/Server/NetworkMessageHandler.cs
2025-11-18 14:54:11 +08:00

213 lines
7.6 KiB
C#

using UnityEngine;
using Mirror;
using Mirror.BouncyCastle.Tls.Crypto.Impl.BC;
public class NetworkMessageHandler : MonoBehaviour
{
public static NetworkMessageHandler Instance;
public static NetworkConnectionToClient CurrentConn;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
NetworkServer.RegisterHandler<GameMessage>(OnClientMessageReceived);
}
void OnClientMessageReceived(NetworkConnectionToClient conn, GameMessage msg)
{
Debug.Log($"收到客戶端訊息: {msg.action} {msg.payload}");
switch (msg.action)
{
case "welcome":
{
switch (msg.payload)
{
case "hello":
if (ServerHomeWaittingSceneController.Instance != null)
{
CurrentConn = conn;
ServerHomeWaittingSceneController.Instance.OnClientConnected();
SendMessageToClient("welcome", "hello");
// clean data
ServerWorkTopRightScore.cleanData();
ServerWorkMessagePanel.cleanData();
ServerWorkMessagePanel.workMessageCount = 0;
}
break;
}
}
break;
case "workMessage":
{
GameMessageWork msgObj = JsonUtility.FromJson<GameMessageWork>(msg.payload);
if (msgObj != null)
{
ServerWorkMessagePanel.workMessage = msgObj.message;
ServerWorkMessagePanel.workMessageType = msgObj.type;
ServerWorkMessagePanel.workPresent = msgObj.present;
ServerWorkMessagePanel.workMessageCount = msgObj.count;
if (ServerWorkMessagePanel.workMessageCount != 0)
{
if (ServerWorkSceneController.Instance != null)
{
ServerWorkSceneController.Instance.processStep(2);
}
}
if (ServerWorkMessagePanel.Instance)
{
ServerWorkMessagePanel.Instance.onReceivedData();
}
}
else
{
Debug.LogError("workMessage failed");
}
}
break;
case "workProcess":
{
switch(msg.payload)
{
case "exit":
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(9);
}
break;
case "survey_ok":
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(10);
}
break;
case "continue":
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(12);
}
break;
}
}
break;
case "gameSurvey":
{
GameMessageSurvey msgObj = JsonUtility.FromJson<GameMessageSurvey>(msg.payload);
if (msgObj != null)
{
ServerWorkMessageReplyExitSurveyPanel.val1 = msgObj.val1;
ServerWorkMessageReplyExitSurveyPanel.val2 = msgObj.val2;
ServerWorkMessageReplyExitSurveyPanel.val3 = msgObj.val3;
ServerWorkMessageReplyExitSurveyPanel.text1 = msgObj.text1;
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(10);
}
if (ServerWorkMessageReplyExitSurveyPanel.Instance)
{
ServerWorkMessageReplyExitSurveyPanel.Instance.loadData();
}
}
}
break;
case "gameProcess":
{
}
break;
case "gameOpen":
{
ServerGamePanel.nameOfTheGameWillBeOpened = msg.payload;
if (ServerGamePanel.Instance)
{
ServerGamePanel.Instance.gameOpen();
}
}
break;
case "getWords":
{
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(18);
}
}
break;
case "gameSurveyFinish":
{
GameMessageSurvey msgObj = JsonUtility.FromJson<GameMessageSurvey>(msg.payload);
if (msgObj != null)
{
ServerWorkMessageReplyExitSurveyPanel.val1 = msgObj.val1;
ServerWorkMessageReplyExitSurveyPanel.val2 = msgObj.val2;
ServerWorkMessageReplyExitSurveyPanel.val3 = msgObj.val3;
ServerWorkMessageReplyExitSurveyPanel.text1 = msgObj.text1;
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(19);
}
//if (ServerWorkGameFinalPanel.Instance)
//{
//ServerWorkGameFinalPanel.Instance.loadSurveyData();
//}
}
}
break;
case "gameTalkingPeopleSay":
{
if (ServerGameTalkingPanel.Instance)
{
ServerGameTalkingPanel.Instance.onReceivedChatMessage(msg.payload);
}
}
break;
case "gameTypingResult":
{
ServerGameTypingPanel.result = msg.payload;
if (ServerGameTypingPanel.Instance)
{
ServerGameTypingPanel.Instance.OnReceivedResult();
}
}
break;
}
}
public void SendMessageToClient(string action, string message)
{
if (CurrentConn != null && CurrentConn.isReady)
{
GameMessage msg = new GameMessage { action = action, payload = message };
CurrentConn.Send(msg);
Debug.Log($"發送到客戶端: {message}");
}
else
{
Debug.Log($"發送到客戶端失敗: {message}");
}
}
}