Skip to content

Commit 92796e4

Browse files
committed
wip for fixing hard disconnect issue. in theory, allocation ID set in lobby should be in charge of following relay disconnections
1 parent e35b18e commit 92796e4

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

Assets/BossRoom/Scripts/Shared/Net/ConnectionManagement/ClientGameNetPortal.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections;
3+
using System.Text;
34
using Unity.Multiplayer.Samples.BossRoom.Shared;
45
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
56
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Lobbies;
@@ -165,25 +166,26 @@ void OnDisconnectOrTimeout(ulong clientID)
165166

166167
//On a client disconnect we want to take them back to the main menu.
167168
//We have to check here in SceneManager if our active scene is the main menu, as if it is, it means we timed out rather than a raw disconnect;
168-
if (SceneManager.GetActiveScene().name != "MainMenu")
169+
switch (DisconnectReason.Reason)
169170
{
170-
if (DisconnectReason.Reason == ConnectStatus.UserRequestedDisconnect || DisconnectReason.Reason == ConnectStatus.HostDisconnected || NetworkManager.Singleton.IsHost)
171-
{
172-
// simply shut down and go back to main menu
173-
m_ApplicationController.LeaveSession();
174-
}
175-
else
176-
{
171+
case ConnectStatus.UserRequestedDisconnect:
172+
case ConnectStatus.HostDisconnected:
173+
case ConnectStatus.LoggedInAgain:
174+
case ConnectStatus.ServerFull:
175+
m_ApplicationController.LeaveSession(); // go through the normal leave flow
176+
break;
177+
case ConnectStatus.GenericDisconnect:
178+
case ConnectStatus.Undefined:
177179
DisconnectReason.SetDisconnectReason(ConnectStatus.Reconnecting);
180+
178181
// load new scene to workaround MTT-2684
179182
SceneManager.LoadScene("Loading");
183+
180184
// try reconnecting
181185
m_TryToReconnectCoroutine ??= StartCoroutine(TryToReconnect(lobbyCode));
182-
}
183-
}
184-
else
185-
{
186-
NetworkTimedOut?.Invoke();
186+
break;
187+
default:
188+
throw new NotImplementedException(DisconnectReason.Reason.ToString());
187189
}
188190

189191
m_ConnectStatusPub.Publish(DisconnectReason.Reason);
@@ -283,11 +285,9 @@ async void ConnectClient(Action<string> onFailure)
283285
{
284286
try
285287
{
286-
var clientRelayUtilityTask = UnityRelayUtilities.JoinRelayServerFromJoinCode(m_JoinCode);
287-
await clientRelayUtilityTask;
288-
var (ipv4Address, port, allocationIdBytes, connectionData, hostConnectionData, key) = clientRelayUtilityTask.Result;
288+
var (ipv4Address, port, allocationId, allocationIdBytes, connectionData, hostConnectionData, key) = await UnityRelayUtilities.JoinRelayServerFromJoinCode(m_JoinCode);
289289

290-
m_LobbyServiceFacade.UpdatePlayerRelayInfoAsync(allocationIdBytes.ToString(), m_JoinCode, null, null);
290+
m_LobbyServiceFacade.UpdatePlayerRelayInfoAsync(allocationId.ToString(), m_JoinCode, null, null);
291291
var utp = (UnityTransport)NetworkManager.Singleton.NetworkConfig.NetworkTransport;
292292
utp.SetRelayServerData(ipv4Address, port, allocationIdBytes, key, connectionData, hostConnectionData);
293293
}

Packages/com.unity.multiplayer.samples.coop/Utilities/Net/UnityRelayUtilities.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static async
4242
}
4343

4444
public static async
45-
Task<(string ipv4address, ushort port, byte[] allocationIdBytes, byte[] connectionData, byte[]
45+
Task<(string ipv4address, ushort port, Guid allocationId, byte[] allocationIdBytes, byte[] connectionData, byte[]
4646
hostConnectionData, byte[] key)> JoinRelayServerFromJoinCode(string joinCode)
4747
{
4848
JoinAllocation allocation;
@@ -59,7 +59,7 @@ public static async
5959
Debug.Log($"host: {allocation.HostConnectionData[0]} {allocation.HostConnectionData[1]}");
6060
Debug.Log($"client: {allocation.AllocationId}");
6161

62-
return (allocation.RelayServer.IpV4, (ushort)allocation.RelayServer.Port, allocation.AllocationIdBytes,
62+
return (allocation.RelayServer.IpV4, (ushort)allocation.RelayServer.Port, allocation.AllocationId, allocation.AllocationIdBytes,
6363
allocation.ConnectionData, allocation.HostConnectionData, allocation.Key);
6464
}
6565
}

0 commit comments

Comments
 (0)