This commit is contained in:
2026-09-26 15:35:40 +08:00
parent b777f0f6aa
commit cbaf4afd95
47 changed files with 454 additions and 60 deletions
@@ -90,9 +90,17 @@ namespace Assets.MyGame.Scripts.Net
case "BeginGame":
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<ChessGameRoom>>(msg.ToString()).arguments[0];
roomMainPanel.subUIManager.CloseAll();
roomMainPanel.StartGame(msg);
roomMainPanel.UpdateUserData(va);
if (roomMainPanel != null && roomMainPanel.IsChessGameActive && va.state == 2)
{
// 对局中收到 BeginGame = 断线重连/取消挂起的房间同步:只刷新玩家数据,不重置对局
roomMainPanel.UpdateUserData(va);
}
else
{
roomMainPanel.subUIManager.CloseAll();
roomMainPanel.StartGame(msg);
roomMainPanel.UpdateUserData(va);
}
}
break;
@@ -174,6 +182,12 @@ namespace Assets.MyGame.Scripts.Net
{
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQDefeated);
}
// 服务端已结算:本地对局同步置结束 + 停表(防后台方回前台后对局还在跑)
if (roomMainPanel != null)
{
roomMainPanel.StopWaitCountdown();
roomMainPanel.MarkChessGameOverByServer();
}
// 结算后按结果实时更新房间双方金币显示
roomMainPanel.ApplySettlementGold(va);
}
@@ -222,7 +236,16 @@ namespace Assets.MyGame.Scripts.Net
}
break;
case "Disconnect":
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
{
// 对方断线 { userId, disconnectTime, timeoutSeconds }:只提示等待重连,
// 服务端超时未重连会自动判负推 GameEnd(心跳里的 CheckTimeout 也会触发检查)
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
string disUserId = va["userId"]?.ToString();
int disTimeout = 60;
if (va.ContainsKey("timeoutSeconds") && va["timeoutSeconds"] != null)
int.TryParse(va["timeoutSeconds"].ToString(), out disTimeout);
if (roomMainPanel != null) roomMainPanel.OnOpponentDisconnected(disUserId, disTimeout);
}
break;
case "GameError":
{
@@ -251,6 +274,7 @@ namespace Assets.MyGame.Scripts.Net
{
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<Dictionary<string, object>>>(msg).arguments[0];
Debug.Log($"[Chess] 重连: userId={va["userId"]}, userName={va["userName"]}");
if (roomMainPanel != null) roomMainPanel.OnOpponentReconnected(va["userId"]?.ToString());
}
break;
@@ -272,6 +296,8 @@ namespace Assets.MyGame.Scripts.Net
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQWin);
else
roomMainPanel.subUIManager.ShowAsync(UIPanel.ZGXQDefeated);
// 服务端已结算:本地对局同步置结束(防后台方回前台后对局还在跑)
if (roomMainPanel != null) roomMainPanel.MarkChessGameOverByServer();
// 结算后按结果实时更新房间双方金币显示
roomMainPanel.ApplySettlementGold(winUserId);
}
@@ -316,9 +342,9 @@ namespace Assets.MyGame.Scripts.Net
case "PlayerAfkNotice":
{
// 玩家挂起通知 { userId }(房间组推送;挂起仅表现提示,不影响服务端操作校验)
// 表现层(座位挂起标记)由 UI 对话接入
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<PlayerAfkNoticeData>>(msg).arguments[0];
Debug.Log($"[Chess] 玩家挂起: userId={va?.userId}");
if (roomMainPanel != null) roomMainPanel.OnPlayerAfkNotice(va?.userId);
}
break;
@@ -327,6 +353,7 @@ namespace Assets.MyGame.Scripts.Net
// 玩家取消挂起通知 { userId }(房间组推送;发起者本人另收 BeginGame 恢复房间同步)
var va = JsonConvert.DeserializeObject<WebSocketResponseBase<PlayerAfkNoticeData>>(msg).arguments[0];
Debug.Log($"[Chess] 玩家取消挂起: userId={va?.userId}");
if (roomMainPanel != null) roomMainPanel.OnPlayerCancelAfkNotice(va?.userId);
}
break;