2026-06-26 19:28:39 +08:00
|
|
|
|
using Assets.MyGame.Scripts.Net.WebResponses;
|
2026-04-15 18:30:37 +08:00
|
|
|
|
using Best.WebSockets;
|
2026-02-03 11:35:19 +08:00
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using UnityEngine;
|
2026-02-26 11:05:56 +08:00
|
|
|
|
using static Assets.MyGame.Scripts.Net.WebResponses.ChineseChess.ChineseChessGameClassList;
|
2026-02-03 11:35:19 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Assets.MyGame.Scripts.Net
|
|
|
|
|
|
{
|
|
|
|
|
|
public partial class WebSocketManager : MonoSingleton<WebSocketManager>
|
|
|
|
|
|
{
|
|
|
|
|
|
public void OnMessage(WebSocket web, string msg, SocketType type)
|
|
|
|
|
|
{
|
2026-05-18 18:39:11 +08:00
|
|
|
|
#if UNITY_EDITOR
|
2026-02-03 11:35:19 +08:00
|
|
|
|
Debug.Log($"[WebSocket] {type} 收到消息: {msg}");
|
2026-05-18 18:39:11 +08:00
|
|
|
|
|
|
|
|
|
|
#endif
|
2026-02-13 19:23:01 +08:00
|
|
|
|
string[] msgs = msg.Split('\u001e');
|
|
|
|
|
|
foreach (var item in msgs)
|
2026-02-03 11:35:19 +08:00
|
|
|
|
{
|
2026-02-13 19:23:01 +08:00
|
|
|
|
var v = JsonConvert.DeserializeObject<WebSocketResponseBase<object>>(item);
|
|
|
|
|
|
if (v == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
// TODO: 这里可以做统一消息分发
|
|
|
|
|
|
#region 消息处理
|
|
|
|
|
|
switch (type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case SocketType.login:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
LoginMSG(item, v);
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2026-02-13 19:23:01 +08:00
|
|
|
|
case SocketType.room:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
case SocketType.game:
|
2026-02-13 19:23:01 +08:00
|
|
|
|
FishMSG(item, v);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case SocketType.chess:
|
|
|
|
|
|
ChineseChess(item, v);
|
|
|
|
|
|
break;
|
2026-04-15 18:30:37 +08:00
|
|
|
|
case SocketType.customer:
|
|
|
|
|
|
CustomerMSG(item, v);
|
|
|
|
|
|
break;
|
2026-02-13 19:23:01 +08:00
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2026-02-03 11:35:19 +08:00
|
|
|
|
}
|
2026-02-26 11:05:56 +08:00
|
|
|
|
|
2026-02-13 19:23:01 +08:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private static void ChineseChess(string msg, WebSocketResponseBase<object> v)
|
|
|
|
|
|
{
|
2026-02-26 11:05:56 +08:00
|
|
|
|
var roomMainPanel = UIManager.Instance.Get<ChineseChessMainPanel>(UIPanel.MainGamePanelZGXQ);
|
2026-02-13 19:23:01 +08:00
|
|
|
|
switch ((MessageType)v.type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MessageType.Invocation:
|
|
|
|
|
|
switch (v.target)
|
|
|
|
|
|
{
|
|
|
|
|
|
case "GetRoomList":
|
|
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.MainGamePanelZGXQ, msg);
|
|
|
|
|
|
Screen.orientation = ScreenOrientation.Portrait;
|
|
|
|
|
|
break;
|
2026-02-26 11:05:56 +08:00
|
|
|
|
case "BeginGame":
|
2026-03-09 09:25:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
|
|
|
|
|
|
roomMainPanel.subUIManager.CloseAll();
|
|
|
|
|
|
roomMainPanel.StartGame(msg);
|
|
|
|
|
|
roomMainPanel.UpdateUserData(va);
|
|
|
|
|
|
}
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
2026-02-26 11:05:56 +08:00
|
|
|
|
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);
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
2026-02-26 11:05:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
2026-02-26 11:05:56 +08:00
|
|
|
|
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];
|
2026-06-26 19:28:39 +08:00
|
|
|
|
if (va == null || va == "")
|
2026-05-08 06:49:53 +08:00
|
|
|
|
{
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQHe);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (va == GameManager.Instance.user.id)
|
2026-02-26 11:05:56 +08:00
|
|
|
|
{
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQDefeated);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-09 09:25:01 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case "ExitRoomSuccess":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
2026-06-26 19:28:39 +08:00
|
|
|
|
if (GameManager.Instance.user.id == va)
|
2026-03-09 09:25:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
WebSocketSendList.GetRoomListChineseChess(1);
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-03-09 09:25:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
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--;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
2026-03-09 09:25:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-26 11:05:56 +08:00
|
|
|
|
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);
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
2026-02-26 11:05:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "Disconnect":
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
|
|
|
|
|
|
break;
|
2026-03-09 09:25:01 +08:00
|
|
|
|
case "GameError":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
2026-03-18 17:26:14 +08:00
|
|
|
|
UIManager.Instance.ShowBoardError(va);
|
2026-03-09 09:25:01 +08:00
|
|
|
|
}
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
|
|
|
|
|
break;
|
2026-06-26 23:42:49 +08:00
|
|
|
|
|
|
|
|
|
|
// ======== 新增缺失事件 ========
|
|
|
|
|
|
|
|
|
|
|
|
case "JoinRoom":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg).arguments[0];
|
|
|
|
|
|
// 调用者自身加入成功
|
|
|
|
|
|
if (roomMainPanel != null) roomMainPanel.UpdateUserData(va);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "Reconnect":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log($"[Chess] 重连: userId={va["userId"]}, userName={va["userName"]}");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "AllBeginTime":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log("[Chess] 双方已准备,开始计时");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "GameEnd":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
string winUserId = va["winUserId"]?.ToString();
|
|
|
|
|
|
if (string.IsNullOrEmpty(winUserId))
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQHe);
|
|
|
|
|
|
else if (winUserId == GameManager.Instance.user.id)
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
|
|
|
|
|
|
else
|
|
|
|
|
|
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQDefeated);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "EndGameRequestSent":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log("[Chess] 结束请求已发送: " + va);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "OpponentRequestEnd":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log("[Chess] 对手请求结束: " + va);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "RestartGameSuccess":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg).arguments[0];
|
|
|
|
|
|
if (roomMainPanel != null) roomMainPanel.StartGame(msg);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "RestartRoomNotice":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg).arguments[0];
|
|
|
|
|
|
var panel = roomMainPanel?.subUIManager.Get<UIChineseChessDistrict>(UIPanel.ZGXQDistrict);
|
|
|
|
|
|
if (panel != null) panel.UpdataRoom(va);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "SyncGameData":
|
|
|
|
|
|
{
|
|
|
|
|
|
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
string data = va["data"]?.ToString();
|
|
|
|
|
|
Debug.Log("[Chess] 同步数据: " + data);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2026-02-13 19:23:01 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-04-15 18:30:37 +08:00
|
|
|
|
private static void CustomerMSG(string msg, WebSocketResponseBase<object> v)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch ((MessageType)v.type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MessageType.Invocation:
|
|
|
|
|
|
switch (v.target)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 发起会话回调(用户端):服务端返回 {isOk, msg, conversation}
|
|
|
|
|
|
case "OnConversationStarted":
|
|
|
|
|
|
{
|
|
|
|
|
|
var result = JsonConvert.DeserializeObject<WebSocketResponseBase<CustomerConversationStartedResult>>(msg).arguments[0];
|
|
|
|
|
|
WebSocketReponseList.Customer_OnConversationStarted(result);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
// 消息接收回调(用户端 & 客服端)
|
|
|
|
|
|
case "OnMessageReceived":
|
|
|
|
|
|
{
|
|
|
|
|
|
var result = JsonConvert.DeserializeObject<WebSocketResponseBase<CustomerMessageReceived>>(msg).arguments[0];
|
|
|
|
|
|
WebSocketReponseList.Customer_OnMessageReceived(result);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
// 新会话通知(客服端)
|
|
|
|
|
|
case "OnNewConversation":
|
|
|
|
|
|
{
|
|
|
|
|
|
var result = JsonConvert.DeserializeObject<WebSocketResponseBase<CustomerNewConversationNotice>>(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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// LoginHub 消息处理(Broadcast / AssetUpdated / BackpackUpdated / NewEmail)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private static void LoginMSG(string msg, WebSocketResponseBase<object> v)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch ((MessageType)v.type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MessageType.Invocation:
|
|
|
|
|
|
switch (v.target)
|
|
|
|
|
|
{
|
|
|
|
|
|
case "Broadcast":
|
|
|
|
|
|
WebSocketReponseList.LoginBroadcast(msg);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "AssetUpdated":
|
|
|
|
|
|
WebSocketReponseList.AssetUpdated(msg);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "BackpackUpdated":
|
|
|
|
|
|
WebSocketReponseList.BackpackUpdated(msg);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "NewEmail":
|
|
|
|
|
|
WebSocketReponseList.NewEmail(msg);
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-13 19:23:01 +08:00
|
|
|
|
private static void FishMSG(string msg, WebSocketResponseBase<object> v)
|
|
|
|
|
|
{
|
2026-02-03 11:35:19 +08:00
|
|
|
|
switch ((MessageType)v.type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MessageType.Invocation:
|
|
|
|
|
|
switch (v.target)
|
|
|
|
|
|
{
|
2026-05-27 19:47:06 +08:00
|
|
|
|
|
2026-02-03 11:35:19 +08:00
|
|
|
|
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);
|
2026-05-27 19:47:06 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case "RoomFireNotice":
|
|
|
|
|
|
WebSocketReponseList.RoomFireNotice(msg);
|
|
|
|
|
|
|
2026-02-03 11:35:19 +08:00
|
|
|
|
break;
|
|
|
|
|
|
case "RoomKillNotice":
|
2026-02-09 10:44:38 +08:00
|
|
|
|
WebSocketReponseList.RoomKillNotice(msg);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "SyncPlayerGold":
|
|
|
|
|
|
WebSocketReponseList.SyncPlayerGold(msg);
|
2026-02-03 11:35:19 +08:00
|
|
|
|
break;
|
2026-03-09 09:25:01 +08:00
|
|
|
|
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];
|
2026-06-26 19:28:39 +08:00
|
|
|
|
if (userId == GameManager.Instance.user.id)
|
2026-03-09 09:25:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
CreateFishManager.Instance.fangzhu = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
2026-03-18 17:26:14 +08:00
|
|
|
|
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:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelDefault, null, (panel) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
2026-03-18 17:26:14 +08:00
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GameType.FLZY:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelFLZY, null, (panel) =>
|
|
|
|
|
|
{
|
2026-03-18 17:26:14 +08:00
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
2026-05-07 03:46:03 +08:00
|
|
|
|
case GameType.YYSC:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelYYSC, null, (panel) =>
|
|
|
|
|
|
{
|
2026-03-18 17:26:14 +08:00
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GameType.ZGXQ:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelZGXQ, null, (panel) =>
|
|
|
|
|
|
{
|
2026-03-18 17:26:14 +08:00
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GameType.XJMH:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelXJMH, null, (panel) =>
|
|
|
|
|
|
{
|
2026-03-18 17:26:14 +08:00
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GameType.HHWK:
|
2026-06-26 19:28:39 +08:00
|
|
|
|
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelHHWK, null, (panel) =>
|
|
|
|
|
|
{
|
2026-03-18 17:26:14 +08:00
|
|
|
|
WebSocketSendList.GetRoomListFish(GameManager.Instance.gameData.currRoomData.roomLevel, 1);
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
2026-06-26 19:28:39 +08:00
|
|
|
|
|
|
|
|
|
|
// ======== 新增 FishGameHub 缺失事件 ========
|
|
|
|
|
|
|
|
|
|
|
|
case "BindSuccess":
|
|
|
|
|
|
{
|
|
|
|
|
|
var msgText = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log("[FishGameHub] BindSuccess: " + msgText);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "SendPlayerInfoResult":
|
|
|
|
|
|
{
|
|
|
|
|
|
var gold = JsonConvert.DeserializeObject<WebSocketResponseBase<long?>>(msg).arguments[0];
|
|
|
|
|
|
// 发送玩家信息结果,gold 为当前金币数(可为 null)
|
|
|
|
|
|
if (gold.HasValue)
|
|
|
|
|
|
WebSocketReponseList.SyncPlayerGold(JsonConvert.DeserializeObject<WebSocketResponseBase<long>>(msg).arguments[0].ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "RoomDisconnectNotice":
|
|
|
|
|
|
{
|
|
|
|
|
|
var userIdDisc = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log("[FishGameHub] 玩家断线: " + userIdDisc);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "ChangeGunMultipleNotice":
|
|
|
|
|
|
{
|
|
|
|
|
|
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
// { userId, multiple }
|
|
|
|
|
|
if (data != null)
|
|
|
|
|
|
Debug.Log($"[FishGameHub] 炮倍变更: userId={data["userId"]}, multiple={data["multiple"]}");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "UsePropNotice":
|
|
|
|
|
|
{
|
|
|
|
|
|
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
// { userId, propNumber }
|
|
|
|
|
|
Debug.Log($"[FishGameHub] 使用道具: userId={data["userId"]}, prop={data["propNumber"]}");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "KillNotice":
|
|
|
|
|
|
{
|
|
|
|
|
|
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
|
|
|
|
|
|
if (data == null) break;
|
|
|
|
|
|
// { FishId, userName, gold }
|
|
|
|
|
|
string userName = data.TryGetValue("userName", out var un) ? un?.ToString() : "";
|
|
|
|
|
|
string fishId = data.TryGetValue("FishId", out var fi) ? fi?.ToString() : "";
|
|
|
|
|
|
long gold = data.TryGetValue("gold", out var g) ? Convert.ToInt64(g) : 0;
|
|
|
|
|
|
string roomName = GameManager.Instance.gameData.currRoomData?.roomName ?? "";
|
|
|
|
|
|
string roomLevel = GameManager.Instance.gameData.currRoomData?.roomLevel.ToString() ?? "";
|
|
|
|
|
|
string msgText = $"恭喜用户{userName} 在 {roomName} {roomLevel}场 捕获了{fishId}*{gold}倍";
|
|
|
|
|
|
UIManager.Instance.ShowBoardGongGao(msgText);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "OnFishExpired":
|
|
|
|
|
|
{
|
|
|
|
|
|
var fishIds = JsonConvert.DeserializeObject<WebSocketResponseBase<int[]>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log($"[FishGameHub] 鱼过期: {string.Join(",", fishIds)}");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "OnFishList":
|
|
|
|
|
|
{
|
|
|
|
|
|
var fishList = JsonConvert.DeserializeObject<WebSocketResponseBase<object[]>>(msg).arguments[0];
|
|
|
|
|
|
Debug.Log($"[FishGameHub] 鱼列表刷新, 数量={fishList?.Length}");
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2026-02-03 11:35:19 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|