@@ -37,7 +37,6 @@ public class LobbyServiceFacade : IDisposable, IStartable
37
37
38
38
public Lobby CurrentUnityLobby { get ; private set ; }
39
39
40
- LobbyEventCallbacks m_LobbyEventCallbacks ;
41
40
ILobbyEvents m_LobbyEvents ;
42
41
43
42
bool m_IsTracking = false ;
@@ -90,8 +89,6 @@ public Task EndTracking()
90
89
var task = Task . CompletedTask ;
91
90
if ( CurrentUnityLobby != null )
92
91
{
93
- CurrentUnityLobby = null ;
94
-
95
92
var lobbyId = m_LocalLobby ? . LobbyID ;
96
93
97
94
if ( ! string . IsNullOrEmpty ( lobbyId ) )
@@ -105,9 +102,6 @@ public Task EndTracking()
105
102
task = LeaveLobbyAsync ( lobbyId ) ;
106
103
}
107
104
}
108
-
109
- m_LocalUser . ResetState ( ) ;
110
- m_LocalLobby ? . Reset ( m_LocalUser ) ;
111
105
}
112
106
113
107
m_LobbyEvents ? . UnsubscribeAsync ( ) ;
@@ -222,27 +216,44 @@ public Task EndTracking()
222
216
return ( false , null ) ;
223
217
}
224
218
225
- async void OnLobbyChanges ( ILobbyChanges changes )
219
+ void ResetLobby ( )
226
220
{
227
- Debug . Log ( "Lobby updated" ) ;
228
- changes . ApplyToLobby ( CurrentUnityLobby ) ;
229
- m_LocalLobby . ApplyRemoteData ( CurrentUnityLobby ) ;
221
+ CurrentUnityLobby = null ;
222
+ m_LocalUser . ResetState ( ) ;
223
+ m_LocalLobby ? . Reset ( m_LocalUser ) ;
230
224
231
- // as client, check if host is still in lobby
232
- if ( ! m_LocalUser . IsHost )
225
+ // no need to disconnect Netcode, it should already be handled by Netcode's callback to disconnect
226
+ }
227
+
228
+ async void OnLobbyChanges ( ILobbyChanges changes )
229
+ {
230
+ if ( changes . LobbyDeleted )
233
231
{
234
- foreach ( var lobbyUser in m_LocalLobby . LobbyUsers )
232
+ Debug . Log ( "Lobby deleted" ) ;
233
+ ResetLobby ( ) ;
234
+ }
235
+ else
236
+ {
237
+ Debug . Log ( "Lobby updated" ) ;
238
+ changes . ApplyToLobby ( CurrentUnityLobby ) ;
239
+ m_LocalLobby . ApplyRemoteData ( CurrentUnityLobby ) ;
240
+
241
+ // as client, check if host is still in lobby
242
+ if ( ! m_LocalUser . IsHost )
235
243
{
236
- if ( lobbyUser . Value . IsHost )
244
+ foreach ( var lobbyUser in m_LocalLobby . LobbyUsers )
237
245
{
238
- return ;
246
+ if ( lobbyUser . Value . IsHost )
247
+ {
248
+ return ;
249
+ }
239
250
}
240
- }
241
251
242
- m_UnityServiceErrorMessagePub . Publish ( new UnityServiceErrorMessage ( "Host left the lobby" , "Disconnecting." , UnityServiceErrorMessage . Service . Lobby ) ) ;
243
- await EndTracking ( ) ;
252
+ m_UnityServiceErrorMessagePub . Publish ( new UnityServiceErrorMessage ( "Host left the lobby" , "Disconnecting." , UnityServiceErrorMessage . Service . Lobby ) ) ;
253
+ await EndTracking ( ) ;
244
254
245
- // no need to disconnect Netcode, it should already be handled by Netcode's callback to disconnect
255
+ // no need to disconnect Netcode, it should already be handled by Netcode's callback to disconnect
256
+ }
246
257
}
247
258
}
248
259
@@ -278,7 +289,7 @@ async void SubscribeToJoinedLobby()
278
289
lobbyEventCallbacks . LobbyChanged += OnLobbyChanges ;
279
290
lobbyEventCallbacks . KickedFromLobby += OnKickedFromLobby ;
280
291
lobbyEventCallbacks . LobbyEventConnectionStateChanged += OnLobbyEventConnectionStateChanged ;
281
- m_LobbyEvents = await m_LobbyApiInterface . SubscribeToLobby ( m_LocalLobby . LobbyID , m_LobbyEventCallbacks ) ;
292
+ m_LobbyEvents = await m_LobbyApiInterface . SubscribeToLobby ( m_LocalLobby . LobbyID , lobbyEventCallbacks ) ;
282
293
m_JoinedLobbyContentHeartbeat . BeginTracking ( ) ;
283
294
}
284
295
@@ -338,6 +349,7 @@ public async Task LeaveLobbyAsync(string lobbyId)
338
349
try
339
350
{
340
351
await m_LobbyApiInterface . RemovePlayerFromLobby ( uasId , lobbyId ) ;
352
+ ResetLobby ( ) ;
341
353
}
342
354
catch ( LobbyServiceException e )
343
355
{
@@ -376,6 +388,7 @@ public async Task DeleteLobbyAsync(string lobbyId)
376
388
try
377
389
{
378
390
await m_LobbyApiInterface . DeleteLobby ( lobbyId ) ;
391
+ ResetLobby ( ) ;
379
392
}
380
393
catch ( LobbyServiceException e )
381
394
{
0 commit comments