213 lines
7.6 KiB
C#
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}");
|
|
}
|
|
}
|
|
} |