Petition-to-the-Gods-V3/Assets/Scripts/Server/NetworkMessageHandler.cs
chiyu.lin 4ede3ccfa6 fix Q15
資料移到GlobalData
串接星星與回覆,調整星星顯示與觸發
2025-11-19 17:40:43 +08:00

229 lines
8.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
GlobalData.ResetGameData();
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();
}
else
{
//因為時間同步的問題這2個遊戲強制Server進入遊戲畫面
if (msg.payload == "typing" || msg.payload == "sticks")
{
ServerWorkSceneController.Instance.processStep(13);
}
}
}
break;
case "getWords":
{
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(18);
}
}
break;
case "gameSurveyFinish":
{
GameMessageSurvey msgObj = JsonUtility.FromJson<GameMessageSurvey>(msg.payload);
if (msgObj != null)
{
GlobalData.SURVEY_STAR1 = msgObj.val1;
GlobalData.SURVEY_STAR2 = msgObj.val2;
GlobalData.SURVEY_STAR3 = msgObj.val3;
GlobalData.SURVEY_TEXT = msgObj.text1;
ServerWorkMessageReplyExitSurveyPanel.val1 = msgObj.val1;
ServerWorkMessageReplyExitSurveyPanel.val2 = msgObj.val2;
ServerWorkMessageReplyExitSurveyPanel.val3 = msgObj.val3;
ServerWorkMessageReplyExitSurveyPanel.text1 = msgObj.text1;
if (ServerWorkSceneController.Instance)
{
ServerWorkSceneController.Instance.processStep(19);
}
if (ServerGameFinalSurveyPanel.Instance)
{
ServerGameFinalSurveyPanel.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;
case "gameSticksFinish":
{
}
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}");
}
}
}