migration
This commit is contained in:
@@ -162,7 +162,10 @@ public class NetManager : NetworkManager
|
||||
{
|
||||
base.OnClientDisconnect();
|
||||
Logger.Log("Client disconnected");
|
||||
if (ShouldReconnect())
|
||||
// Mirror raises OnDisconnectedEvent before clearing ConnectState, so
|
||||
// NetworkClient.isConnected is still true here on involuntary drops.
|
||||
// Gate on policy flags only; teardown wait happens in the reconnect loop.
|
||||
if (CanAttemptReconnect())
|
||||
{
|
||||
if (reconnectCoroutine == null)
|
||||
reconnectCoroutine = StartCoroutine(ReconnectLoopCoroutine());
|
||||
@@ -206,6 +209,12 @@ public class NetManager : NetworkManager
|
||||
SetReconnectCanvasVisible(true);
|
||||
reopenRequestedThisDisconnect = false;
|
||||
reopenRequestInFlight = false;
|
||||
|
||||
// Wait until Mirror finishes OnClientDisconnectInternal (clears Connected
|
||||
// then Shutdown). Without this, ShouldReconnect() fails immediately.
|
||||
while (NetworkClient.isConnected || NetworkClient.active)
|
||||
yield return null;
|
||||
|
||||
float reconnectStartedAt = Time.realtimeSinceStartup;
|
||||
float initialWaitEnd = Time.realtimeSinceStartup + InitialReconnectDelaySeconds;
|
||||
while (ShouldReconnect() && Time.realtimeSinceStartup < initialWaitEnd)
|
||||
@@ -242,20 +251,32 @@ public class NetManager : NetworkManager
|
||||
SetReconnectCanvasVisible(false);
|
||||
}
|
||||
|
||||
bool ShouldReconnect()
|
||||
/// <summary>
|
||||
/// Policy checks that are safe during Mirror's disconnect callback
|
||||
/// (when <see cref="NetworkClient.isConnected"/> may still be true).
|
||||
/// </summary>
|
||||
bool CanAttemptReconnect()
|
||||
{
|
||||
if (s_IntentionalClientDisconnect)
|
||||
return false;
|
||||
if (NetworkServer.active)
|
||||
return false;
|
||||
if (NetworkClient.isConnected)
|
||||
return false;
|
||||
if (GameManager.instance != null && GameManager.instance.isGameEnded)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ShouldReconnect()
|
||||
{
|
||||
if (!CanAttemptReconnect())
|
||||
return false;
|
||||
if (NetworkClient.isConnected)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
IEnumerator CoRequestReopenForCurrentPort()
|
||||
{
|
||||
reopenRequestInFlight = true;
|
||||
|
||||
Reference in New Issue
Block a user