Files
5.24BuYu/Assets/MyGame/Scripts/Net/WebSocketManager_Message.cs
T
2026-03-18 17:26:14 +08:00

321 lines
15 KiB
C#

using Best.WebSockets;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using static Assets.MyGame.Scripts.Net.WebResponses.ChineseChess.ChineseChessGameClassList;
namespace Assets.MyGame.Scripts.Net
{
public partial class WebSocketManager : MonoSingleton<WebSocketManager>
{
public void OnMessage(WebSocket web, string msg, SocketType type)
{
Debug.Log($"[WebSocket] {type} 收到消息: {msg}");
string[] msgs = msg.Split('\u001e');
foreach (var item in msgs)
{
var v = JsonConvert.DeserializeObject<WebSocketResponseBase<object>>(item);
if (v == null)
{
return;
}
// TODO: 这里可以做统一消息分发
#region 消息处理
switch (type)
{
case SocketType.login:
case SocketType.room:
case SocketType.game:
FishMSG(item, v);
break;
case SocketType.chess:
ChineseChess(item, v);
break;
default:
break;
}
}
#endregion
}
private static void ChineseChess(string msg, WebSocketResponseBase<object> v)
{
var roomMainPanel = UIManager.Instance.Get<ChineseChessMainPanel>(UIPanel.MainGamePanelZGXQ);
switch ((MessageType)v.type)
{
case MessageType.Invocation:
switch (v.target)
{
case "GetRoomList":
UIManager.Instance.ShowAsync(UIPanel.MainGamePanelZGXQ, msg);
Screen.orientation = ScreenOrientation.Portrait;
break;
case "BeginGame":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
roomMainPanel.subUIManager.CloseAll();
roomMainPanel.StartGame(msg);
roomMainPanel.UpdateUserData(va);
}
break;
case "CreateRoomNotice":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
var panel = roomMainPanel.subUIManager.Get<UIChineseChessDistrict>(UIPanel.ZGXQDistrict);
if (panel != null)
{
panel.UpdataRoom(va);
}
}
break;
case "JoinRoomNotice":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
var panel = roomMainPanel.subUIManager.Get<UIChineseChessDistrict>(UIPanel.ZGXQDistrict);
if (panel != null)
{
panel.UpdataRoom(va);
}
}
break;
//所有人
case "GoldConfigRoomNotice":
roomMainPanel.subUIManager.CloseAll();
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQGameExplain, msg);
break;
//单发给触发人
case "GoldConfigSuccess":
break;
case "ReadyNotice":
//roomMainPanel.subUIManager.CloseAll();
roomMainPanel.InitRoomData();
break;
case "GameOperation":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
roomMainPanel.IsShowHint(va["data"].ToString(), Convert.ToInt32(va["type"]));
}
break;
case "EndGameSuccess":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
if (va == GameManager.Instance.user.id)
{
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
}
else
{
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQDefeated);
}
}
break;
case "ExitRoomSuccess":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
if (GameManager.Instance.user.id== va)
{
WebSocketSendList.GetRoomListChineseChess(1);
}
else
{
for (int i = 0; i < roomMainPanel.roomData.users.Count; i++)
{
var item = roomMainPanel.roomData.users[i];
if (item.userId != va)
{
roomMainPanel.roomData.users.Remove(item);
roomMainPanel.UpdateUserData(roomMainPanel.roomData);
i--;
}
}
}
}
break;
case "ExitRoomNotice":
{
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
var panel = roomMainPanel.subUIManager.Get<UIChineseChessDistrict>(UIPanel.ZGXQDistrict);
if (panel != null)
{
panel.UpdataRoom(va);
}
}
}
break;
case "Disconnect":
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
break;
case "GameError":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
UIManager.Instance.ShowBoardError(va);
}
break;
default:
break;
}
break;
case MessageType.StreamItem:
break;
case MessageType.Completion:
break;
case MessageType.StreamInvocation:
break;
case MessageType.CancelInvocation:
break;
case MessageType.Ping:
break;
case MessageType.Close:
break;
default:
break;
}
}
private static void FishMSG(string msg, WebSocketResponseBase<object> v)
{
switch ((MessageType)v.type)
{
case MessageType.Invocation:
switch (v.target)
{
case "GetRoomListResult":
//UIManager.Instance.Get<UIHome_BY_SelectRoomLevelPanel>(UIPanel.SelectRoomPenel);
WebSocketReponseList.GetRoomListResult(msg);
break;
case "RoomJoinNotice":
WebSocketReponseList.RoomJoinNotice(msg);
break;
case "RoomInfo":
WebSocketReponseList.RoomInfo(msg);
break;
case "RoomKillNotice":
WebSocketReponseList.RoomKillNotice(msg);
break;
case "SyncPlayerGold":
WebSocketReponseList.SyncPlayerGold(msg);
break;
case "GetRoomInfoResult":
WebSocketReponseList.GetRoomInfoResult(msg);
break;
case "SyncGameData":
WebSocketReponseList.SyncGameDataResult(msg);
break;
case "RoomLeaveNotice":
WebSocketReponseList.LeaveRoomResult(msg);
//WebSocketManager.Instance.Close(SocketType.game);
break;
case "ChangeControllerUser":
var userId = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
if (userId==GameManager.Instance.user.id)
{
CreateFishManager.Instance.fangzhu = true;
}
break;
case "Exception":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
UIManager.Instance.ShowBoardError(va);
switch (va)
{
case "房间人数已满":
switch (GameManager.Instance.gameData.currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelDefault, null,(panel) =>{
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel,1);
});
break;
case GameType.FLZY:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelFLZY, null, (panel) => {
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
});
break;
case GameType.TGXX:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelTGXX, null, (panel) => {
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
});
break;
case GameType.ZGXQ:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelZGXQ, null, (panel) => {
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
});
break;
case GameType.XJMH:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelXJMH, null, (panel) => {
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
});
break;
case GameType.HHWK:
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelHHWK, null, (panel) => {
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
});
break;
default:
break;
}
break;
default:
break;
}
}
break;
default:
break;
}
break;
case MessageType.StreamItem:
break;
case MessageType.Completion:
break;
case MessageType.StreamInvocation:
break;
case MessageType.CancelInvocation:
break;
case MessageType.Ping:
break;
case MessageType.Close:
break;
default:
break;
}
}
}
}