Files
SVSimServer/SVSim.BattleEngine/Engine/MatchingNetworkConnectChecker.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

166 lines
4.2 KiB
C#

using System;
using System.Collections.Generic;
using Cute;
using Wizard;
public class MatchingNetworkConnectChecker : MatchingIntervalActionBase
{
public Action OnConnectError;
public Action OnTimeoutInitNetwork;
private int _connectFailCount;
private string _doMatchingBattleId;
private int _initNetworkSendNum;
private long _initNetworkTimer;
private bool _isConnectOnly;
private bool _isNotInitBattle;
private bool _isBeforeBattleStartRetry;
private int _phase;
private const int NETWORKOBJECT_CREATE_PHASE = 0;
private const int CONNECT_NETWORK_PHASE = 1;
private const int WAIT_OPEN_NETWORK_PHASE = 2;
private const int SEND_INIT_NETWORK_PHASE = 3;
private const float INIT_NETWORK_EMIT_INTERVAL = 3f;
private const float RECEIVE_WAIT_INIT_NETWORK_TIMER = 15f;
private const float MAX_INIT_NETWORK_EMIT_NUM = 5f;
public static int InitNetworkErrorNum;
private const int INIT_NETWORK_ERROR_NUM_TO_IPV_DIALOG_OPEN = 2;
public MatchingNetworkConnectChecker(Matching matching)
: base(matching)
{
}
public void SetBattleId(string battleId)
{
_doMatchingBattleId = battleId;
}
public void SetConnectOnly()
{
_isConnectOnly = true;
}
public void SetNotInitBattle()
{
_isNotInitBattle = true;
}
public void SetBeforeBattleStartRetry()
{
_isBeforeBattleStartRetry = true;
}
public override void Update()
{
if (!_isActive)
{
return;
}
switch (_phase)
{
case 0:
if (Global.IS_LOAD_ALLDONE || !(ToolboxGame.RealTimeNetworkAgent != null))
{
_matching.SafeStartBattleCoroutine(ToolboxGame.CreateRealTimeNetworkBattleAgent(_matching));
_phase = 1;
}
break;
case 1:
if (!(ToolboxGame.RealTimeNetworkAgent == null))
{
if (GameMgr.GetIns().IsAINetwork)
{
RealTimeNetworkAgent.FinishTaskBase = _matching.GetBattleFinishTask();
}
_connectFailCount = 0;
ToolboxGame.RealTimeNetworkAgent.Connect(PlayerStaticData.UserViewerID, _doMatchingBattleId, delegate
{
_connectFailCount++;
}, _matching, _isBeforeBattleStartRetry);
_phase = 2;
}
break;
case 2:
if (_connectFailCount >= 4)
{
LocalLog.AccumulateTraceLog("FailConnectNodejs");
InitNetworkErrorNum++;
OnConnectError.Call();
_isActive = false;
}
else if (!(ToolboxGame.RealTimeNetworkAgent == null) && ToolboxGame.RealTimeNetworkAgent.IsOpen())
{
if (_isConnectOnly)
{
_isActive = false;
break;
}
OnConnectError = null;
_phase = 3;
LocalLog.AccumulateLastTraceLog("MatchingNetworkConnectChecker_StartInitNetwork");
ToolboxGame.RealTimeNetworkAgent.EmitMsgPack(NetworkBattleDefine.NetworkBattleURI.InitNetwork, new Dictionary<string, object>(), null, isGetableAck: false, -1, isStockData: false);
_initNetworkTimer = TimeUtil.GetAbsoluteTime().Ticks;
}
break;
case 3:
if (ToolboxGame.RealTimeNetworkAgent.IsInitNetworkSuccess())
{
OnTimeoutInitNetwork = null;
_isActive = false;
if (!_isNotInitBattle)
{
_matching.MatchingInitBattle();
}
_matching.SettingRealTimeNetworkEvent();
ToolboxGame.RealTimeNetworkAgent.StartGungnir();
}
else if ((float)NetworkUtility.GetTimeSpanSecond(_initNetworkTimer) >= 3f)
{
_initNetworkTimer = TimeUtil.GetAbsoluteTime().Ticks;
_initNetworkSendNum++;
if ((float)_initNetworkSendNum >= 5f)
{
_isActive = false;
LocalLog.AccumulateTraceLog("FailInitNetwork");
OnTimeoutInitNetwork.Call();
}
else
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary["try"] = _initNetworkSendNum;
LocalLog.AccumulateLastTraceLog("MatchingNetworkConnectChecker_ResendInitNetwork");
ToolboxGame.RealTimeNetworkAgent.EmitMsgPack(NetworkBattleDefine.NetworkBattleURI.InitNetwork, dictionary, null, isGetableAck: false, -1, isStockData: false);
}
}
break;
}
}
public static bool IsOpenIpv6Dialog()
{
if (InitNetworkErrorNum >= 2 && PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.IS_SELECT_IPV6))
{
return true;
}
return false;
}
}