using Assets.MyGame.Scripts.Net.WebResponses; 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 { 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>(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; case SocketType.customer: CustomerMSG(item, v); break; default: break; } } #endregion } private static void ChineseChess(string msg, WebSocketResponseBase v) { var roomMainPanel = UIManager.Instance.Get(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>(msg.ToString()).arguments[0]; roomMainPanel.subUIManager.CloseAll(); roomMainPanel.StartGame(msg); roomMainPanel.UpdateUserData(va); } break; case "CreateRoomNotice": { var va = JsonConvert.DeserializeObject>(msg.ToString()).arguments[0]; var panel = roomMainPanel.subUIManager.Get(UIPanel.ZGXQDistrict); if (panel != null) { panel.UpdataRoom(va); } } break; case "JoinRoomNotice": { var va = JsonConvert.DeserializeObject>(msg.ToString()).arguments[0]; var panel = roomMainPanel.subUIManager.Get(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>>(msg).arguments[0]; roomMainPanel.IsShowHint(va["data"].ToString(), Convert.ToInt32(va["type"])); } break; case "EndGameSuccess": { var va = JsonConvert.DeserializeObject>(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>(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>(msg.ToString()).arguments[0]; var panel = roomMainPanel.subUIManager.Get(UIPanel.ZGXQDistrict); if (panel != null) { panel.UpdataRoom(va); } } } break; case "Disconnect": roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin); break; case "GameError": { var va = JsonConvert.DeserializeObject>(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 CustomerMSG(string msg, WebSocketResponseBase v) { switch ((MessageType)v.type) { case MessageType.Invocation: switch (v.target) { // 发起会话回调(用户端):服务端返回 {isOk, msg, conversation} case "OnConversationStarted": { var result = JsonConvert.DeserializeObject>(msg).arguments[0]; WebSocketReponseList.Customer_OnConversationStarted(result); } break; // 消息接收回调(用户端 & 客服端) case "OnMessageReceived": { var result = JsonConvert.DeserializeObject>(msg).arguments[0]; WebSocketReponseList.Customer_OnMessageReceived(result); } break; // 新会话通知(客服端) case "OnNewConversation": { var result = JsonConvert.DeserializeObject>(msg).arguments[0]; WebSocketReponseList.Customer_OnNewConversation(result); } 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 v) { switch ((MessageType)v.type) { case MessageType.Invocation: switch (v.target) { case "GetRoomListResult": //UIManager.Instance.Get(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>(msg).arguments[0]; if (userId==GameManager.Instance.user.id) { CreateFishManager.Instance.fangzhu = true; } break; case "Exception": { var va = JsonConvert.DeserializeObject>(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; } } } }