Files
5.24BuYu/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs
T
2026-07-02 18:28:50 +08:00

484 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Assets.MyGame.Scripts.Net.WebResponses;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Assets.MyGame.Scripts.Net
{
public class WebSocketReponseList
{
/// <summary>
/// 获取房间列表 room
/// </summary>
/// <param name="msg"></param>
public static void GetRoomListChineseChessResult(string msg)
{
var var1 = UIManager.Instance.Show<UIChineseChessDistrict>(UIPanel.MainGamePanelZGXQ, msg);
}
public static void GetGoldConfigSuccessChineseChessResult(string msg)
{
UIManager.Instance.Get<ChineseChessMainPanel>(UIPanel.MainGamePanelZGXQ).subUIManager.ShowAsync(UIPanel.ZGXQGameExplain);
}
/// <summary>
/// 获取房间列表 room
/// </summary>
/// <param name="msg"></param>
public static void GetRoomListResult(string msg)
{
var var1 = UIManager.Instance.Get<UIHomeMain>(UIPanel.HomeMainPanel);
var selectRoomPanel = var1.subUIManager.Get<UIHome_BY_SelectRoomLevelPanel>(UIPanel.SelectRoomLeavePenel);
if (selectRoomPanel != null && selectRoomPanel.isMySelectRoom)
selectRoomPanel.panel_UIHome_BY_MySelectRoomPenel.Show(msg);
else
{
var v = JsonConvert.DeserializeObject<WebSocketResponseBase<List<GetRoomList>>>(msg).arguments[0];
foreach (var item in v)
{
if (item.currentOnlinePlayerCount < item.maxPlayerCount)
{
WebSocketSendList.GetRoomInfo(item.roomId);
break;
//if (item)
//{
//UIHome_BY_SelectRoomLevelPanel.StartGame(item);
//}
}
}
}
}
/// <summary>
/// 加入房间 room
/// </summary>
/// <param name="msg"></param>
public static void RoomJoinNotice(string msg)
{
string sceneName = "";
UIPanel uIPanel = UIPanel.None;
switch (GameManager.Instance.gameData.currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
break;
case GameType.FLZY:
sceneName = "FLZY";
uIPanel = UIPanel.MainGamePanelFLZY;
break;
case GameType.YYSC:
sceneName = "YYSC";
uIPanel = UIPanel.MainGamePanelYYSC;
break;
case GameType.ZGXQ:
break;
case GameType.XJMH:
sceneName = "XJMH";
uIPanel = UIPanel.MainGamePanelXJMH;
break;
case GameType.HHWK:
sceneName = "HHWK";
uIPanel = UIPanel.MainGamePanelHHWK;
break;
default:
break;
}
if (UIManager.Instance.Get<GameMainPanel_Base>(uIPanel)==null)
{
UIManager.Instance.ShowAsync(uIPanel, UIPanel.HomeMainPanel, msg);
// 卸载所有已加载的游戏地图场景
string[] gameScenes = { "FLZY", "YYSC", "XJMH", "HHWK" };
foreach (var sn in gameScenes)
{
var s = SceneManager.GetSceneByName(sn);
if (s.IsValid() && s.isLoaded)
SceneManager.UnloadSceneAsync(sn);
}
SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
UIManager.Instance.Close(UIPanel.HomeMainPanel);
WebSocketManager.Instance.isGame = true;
}
else
{
// 面板已存在 → 新玩家加入,转发给现有面板激活座位
var panel = UIManager.Instance.Get<GameMainPanel_Base>(uIPanel);
if (panel is GameMainPanel_FishBase fishPanel)
{
var v = JsonConvert.DeserializeObject<WebSocketResponseBase<RoomJoinNotice>>(msg);
if (v.arguments.Count > 0)
{
var notice = v.arguments[0];
// 如果座位被bot占用则替换
var targetSit = fishPanel.list_Sits.Find(s => s.posID == notice.position);
if (targetSit != null && targetSit.isBot)
{
targetSit.isBot = false;
targetSit.ShowWaiting();
}
fishPanel.JoinGame(notice.position, notice.gold, notice.diamond, notice.cannonMultiple, 0, notice.userId, notice.cannonId, notice.wingsId);
}
}
}
}
/// <summary>
/// 房间列表 room
/// </summary>
/// <param name="msg"></param>
public static void RoomInfo(string msg)
{
WebSocketManager.Instance.isGame = false;
var roomData = JsonConvert.DeserializeObject<WebSocketResponseBase<RoomChangeResponse>>(msg).arguments[0];
if (roomData != null)
{
GameManager.Instance.gameData.currRoomData = roomData;
}
else
{
Debug.LogError("roomdata是空:" + msg);
}
}
public static void RoomKillNotice(string msg)
{
CreateFishManager.Instance.Ws_DieFish(msg);
}
public static void RoomFireNotice(string msg)
{
FireCannonSendData fireCannonSendData = JsonConvert.DeserializeObject<WebSocketResponseBase<FireCannonSendData>>(msg).arguments[0];
var syncGameData = fireCannonSendData.extra;
EventCenter.Instance.EventTrigger<FireCannonSendData>(ConstEventString.SyncGameData_FireBullet, fireCannonSendData);
}
public static void SyncPlayerGold(string msg)
{
var gold = JsonConvert.DeserializeObject<WebSocketResponseBase<long>>(msg).arguments[0];
switch (GameManager.Instance.gameData.currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelDefault).currSitData.goldNum = gold;
break;
case GameType.FLZY:
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelFLZY).currSitData.goldNum = gold;
break;
case GameType.YYSC:
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelYYSC).currSitData.goldNum = gold;
break;
case GameType.ZGXQ:
break;
case GameType.XJMH:
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelXJMH).currSitData.goldNum = gold;
break;
case GameType.HHWK:
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelHHWK).currSitData.goldNum = gold;
break;
default:
break;
}
}
public static void GetRoomInfoResult(string msg)
{
//GameManager.Instance.StartGame();RoomChangeResponse
var roomData = JsonConvert.DeserializeObject<WebSocketResponseBase<RoomChangeResponse>>(msg).arguments[0];
UIHome_BY_SelectRoomLevelPanel.StartGame(roomData);
}
public static void SyncGameDataResult(string msg)
{
var syncGameData = JsonConvert.DeserializeObject<WebSocketResponseBase<SyncGameData>>(msg).arguments[0];
switch (syncGameData.frameType)
{
case FrameDataType.none:
break;
case FrameDataType.rotateTurrect:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_Rotate, syncGameData);
break;
case FrameDataType.fireBullet:
// 机器人角度同步:SyncFire_ForBot 发出的 SyncGameData(fireBullet)
// 与 RoomFireNotice(FireCannonSendData) 分开处理,仅用于存储角度到 botLastAngle
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_BotFireAngle, syncGameData);
break;
case FrameDataType.createFish:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_CreateFish, syncGameData);
break;
case FrameDataType.changeAutoTarget:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_ChangeTargetMonster, syncGameData);
break;
case FrameDataType.randomDieFish:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_RendromDieFish, syncGameData);
break;
case FrameDataType.freezeFish:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_FreezeFish, syncGameData);
break;
case FrameDataType.changeTurretState:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_TurretState, syncGameData);
break;
case FrameDataType.changeTurret:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_ChangeTurret, syncGameData);
break;
case FrameDataType.changeCannonMultiple:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_ChangeCannonMultiple, syncGameData);
break;
case FrameDataType.changeWing:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_ChangeWing, syncGameData);
break;
default:
break;
}
}
public static void LeaveRoomResult(string msg)
{
//WebSocketManager.Instance.isGame = false;
//GameManager.Instance.StartGame();RoomChangeResponse
var userid = JsonConvert.DeserializeObject<WebSocketResponseBase<string>>(msg).arguments[0];
switch (GameManager.Instance.gameData.currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
break;
case GameType.FLZY:
{
var panel = UIManager.Instance.Get<GameMainPanel_FLZY>(UIPanel.MainGamePanelFLZY);
if (panel.currSitData.user == userid)
{
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelFLZY);
break;
}
foreach (var item in panel.list_Sits)
{
if (item.user == userid)
{
item.ShowWaiting();
}
}
}
break;
case GameType.YYSC:
{
var panel = UIManager.Instance.Get<GameMainPanel_YYSC>(UIPanel.MainGamePanelYYSC);
if (panel.currSitData.user == userid)
{
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelYYSC);
break;
}
foreach (var item in panel.list_Sits)
{
if (item.user == userid)
{
item.ShowWaiting();
}
}
}
break;
case GameType.ZGXQ:
break;
case GameType.XJMH:
{
var panel = UIManager.Instance.Get<GameMainPanel_XJMH>(UIPanel.MainGamePanelXJMH);
if (panel.currSitData.user == userid)
{
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelXJMH);
break;
}
foreach (var item in panel.list_Sits)
{
Debug.Log(item.user + "---" + userid);
if (item.user == userid)
{
Debug.Log("推出星际迷航");
item.ShowWaiting();
}
}
}
break;
case GameType.HHWK:
{
var panel = UIManager.Instance.Get<GameMainPanel_HHWK>(UIPanel.MainGamePanelHHWK);
if (panel.currSitData.user == userid)
{
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, UIPanel.MainGamePanelHHWK);
break;
}
foreach (var item in panel.list_Sits)
{
if (item.user == userid)
{
item.ShowWaiting();
}
}
}
break;
default:
break;
}
}
// ---------------- LoginHub ----------------
/// <summary>
/// LoginHub Broadcast — 大厅公告广播
/// </summary>
public static void LoginBroadcast(string msg)
{
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<LoginBroadcastData>>(msg).arguments[0];
UIManager.Instance.ShowBoardGongGao(data.message);
}
/// <summary>
/// LoginHub AssetUpdated — 资产变动通知
/// </summary>
public static void AssetUpdated(string msg)
{
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<LoginAssetData>>(msg).arguments[0];
// 触发用户数据刷新
var userId = GameManager.Instance?.user?.id;
if (!string.IsNullOrEmpty(userId))
APIRequestList.GetUser(userId, a => GameManager.Instance.UpdataUserData(a));
}
/// <summary>
/// LoginHub BackpackUpdated — 背包变动通知
/// </summary>
public static void BackpackUpdated(string msg)
{
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<LoginBackpackData>>(msg).arguments[0];
// 刷新用户数据(道具列表在 GetUser 返回中)
var userId = GameManager.Instance?.user?.id;
if (!string.IsNullOrEmpty(userId))
APIRequestList.GetUser(userId, a => GameManager.Instance.UpdataUserData(a));
}
/// <summary>
/// LoginHub NewEmail — 新邮件通知
/// </summary>
public static void NewEmail(string msg)
{
var data = JsonConvert.DeserializeObject<WebSocketResponseBase<LoginNewEmailData>>(msg).arguments[0];
UIManager.Instance.ShowBoardError($"收到新邮件:{data.title}");
}
// ---------------- Customer ----------------
/// <summary>
/// 发起会话回调(用户端)
/// isOk=false 时弹错误提示;isOk=true 时自动加入会话房间
/// </summary>
public static void Customer_OnConversationStarted(CustomerConversationStartedResult result)
{
if (!result.isOk)
{
UIManager.Instance.ShowBoardError(result.msg);
return;
}
// 加入会话房间,之后才能收发消息
//WebSocketSendList.Customer_JoinConversation(result.conversation.id);
// TODO: 通知客服 UI 显示会话(替换为你的实际 Panel 调用)
UIManager.Instance.Get<UIHomeMain>(UIPanel.HomeMainPanel).subUIManager.Get<UIHome_BY_ServicePanel>(UIPanel.ServicePanel)?.OnConversationStarted(result);
}
/// <summary>
/// 消息接收回调(用户端 & 客服端)
/// </summary>
public static void Customer_OnMessageReceived(CustomerMessageReceived msg)
{
// TODO: 通知客服 UI 追加消息(替换为你的实际 Panel 调用)
UIManager.Instance.Get<UIHomeMain>(UIPanel.HomeMainPanel).subUIManager.Get<UIHome_BY_ServicePanel>(UIPanel.ServicePanel)?.OnMessageReceived(msg);
Debug.Log($"[Customer] 收到消息 from {msg.senderName}({msg.senderType}): {msg.content}");
}
/// <summary>
/// 新会话通知(客服端)
/// </summary>
public static void Customer_OnNewConversation(CustomerNewConversationNotice notice)
{
// 客服端自动加入会话房间
WebSocketSendList.Customer_JoinConversation(notice.conversationId);
// TODO: 通知客服端 UI 显示新会话(替换为你的实际 Panel 调用)
// UIManager.Instance.Get<UICustomerServicePanel>(UIPanel.CustomerServicePanel)?.OnNewConversation(notice);
Debug.Log($"[Customer] 新会话来了,userId={notice.userId},userName={notice.userName}");
}
/// <summary>
/// LoginHub Broadcast 数据
/// </summary>
[Serializable]
public class LoginBroadcastData
{
public string userName;
public string avatarUrl;
public int level;
public int vipLevel;
public string message;
public long time;
}
/// <summary>
/// LoginHub AssetUpdated 数据
/// </summary>
[Serializable]
public class LoginAssetData
{
public int currencyType;
public int changeType;
public long amount;
public long newGold;
public int newDiamond;
public string source;
public string remark;
}
/// <summary>
/// LoginHub BackpackUpdated 数据
/// </summary>
[Serializable]
public class LoginBackpackData
{
public string action;
public string propNumber;
public int count;
public List<object> props;
}
/// <summary>
/// LoginHub NewEmail 数据
/// </summary>
[Serializable]
public class LoginNewEmailData
{
public string title;
public string emailId;
}
}
}
// end namespace