using Best.WebSockets; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; 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; default: break; } } #endregion } private static void ChineseChess(string msg, WebSocketResponseBase v) { switch ((MessageType)v.type) { case MessageType.Invocation: switch (v.target) { case "GetRoomList": UIManager.Instance.ShowAsync(UIPanel.MainGamePanelZGXQ, msg); Screen.orientation = ScreenOrientation.Portrait; 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; 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; } } } }