Skip to content

Commit edbf384

Browse files
committed
Adding instructions when we get a service error on conflicting joins
1 parent df31161 commit edbf384

File tree

6 files changed

+44
-6
lines changed

6 files changed

+44
-6
lines changed

Assets/BossRoom/Scripts/Client/Game/State/ClientMainMenuState.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace Unity.Multiplayer.Samples.BossRoom.Client
2121
/// </remarks>
2222
public class ClientMainMenuState : GameStateBehaviour
2323
{
24+
public const string AuthProfileCommandLineArg = "-AuthProfile";
2425
public override GameState ActiveState { get { return GameState.MainMenu; } }
2526

2627
[SerializeField] GameObject[] m_GameObjectsThatWillBeInjectedAutomatically;
@@ -67,7 +68,7 @@ void InjectDependenciesAndInitialize(AuthenticationServiceFacade authServiceFaca
6768
var arguments = System.Environment.GetCommandLineArgs();
6869
for (int i = 0; i < arguments.Length; i++)
6970
{
70-
if (arguments[i] == "-AuthProfile")
71+
if (arguments[i] == AuthProfileCommandLineArg)
7172
{
7273
var profileId = arguments[i + 1];
7374
unityAuthenticationInitOptions.SetProfile(profileId);

Assets/BossRoom/Scripts/Client/UI/Lobby/LobbyUIMediator.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
using System;
12
using TMPro;
23
using Unity.Multiplayer.Samples.BossRoom.Client;
34
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
45
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Infrastructure;
56
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Lobbies;
7+
using Unity.Services.Lobbies;
68
using Unity.Services.Lobbies.Models;
79
using UnityEngine;
810

@@ -24,6 +26,7 @@ public class LobbyUIMediator : MonoBehaviour
2426
NameGenerationData m_NameGenerationData;
2527
GameNetPortal m_GameNetPortal;
2628
ClientGameNetPortal m_ClientNetPortal;
29+
private IDisposable m_Subscriptions;
2730

2831
[Inject]
2932
void InjectDependenciesAndInitialize(
@@ -33,7 +36,8 @@ void InjectDependenciesAndInitialize(
3336
LocalLobby localLobby,
3437
NameGenerationData nameGenerationData,
3538
GameNetPortal gameNetPortal,
36-
ClientGameNetPortal clientGameNetPortal
39+
ClientGameNetPortal clientGameNetPortal,
40+
ISubscriber<UnityServiceErrorMessage> serviceError
3741
)
3842
{
3943
m_NameGenerationData = nameGenerationData;
@@ -46,6 +50,24 @@ ClientGameNetPortal clientGameNetPortal
4650
RegenerateName();
4751

4852
m_ClientNetPortal.NetworkTimedOut += OnNetworkTimeout;
53+
m_Subscriptions = serviceError.Subscribe(ServiceErrorHandler);
54+
}
55+
56+
private void ServiceErrorHandler(UnityServiceErrorMessage error)
57+
{
58+
var errorMessage = error.Message;
59+
if (error.AffectedService == UnityServiceErrorMessage.Service.Lobby)
60+
{
61+
if ((error.OriginalException as LobbyServiceException).Reason == LobbyExceptionReason.LobbyConflict)
62+
{
63+
// LobbyConflict can have multiple causes. Let's add other solutions here if there's other situations that arise for this.
64+
errorMessage += "\nSee logs for possible causes and solution.";
65+
Debug.LogError($"Got service error {error.Message} with LobbyConflict. Possible conflict cause: Trying to play with two builds on the " +
66+
$"same machine. Please use command line arg '{ClientMainMenuState.AuthProfileCommandLineArg} someName' to set a different auth profile.\n");
67+
}
68+
}
69+
70+
PopupPanel.ShowPopupPanel("Service error", errorMessage);
4971
}
5072

5173
void OnDestroy()
@@ -54,6 +76,8 @@ void OnDestroy()
5476
{
5577
m_ClientNetPortal.NetworkTimedOut -= OnNetworkTimeout;
5678
}
79+
80+
m_Subscriptions.Dispose();
5781
}
5882

5983
//Lobby and Relay calls done from UI

Assets/BossRoom/Scripts/Shared/Net/UnityServices/Auth/AuthenticationServiceFacade.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void OnServiceException(AuthenticationException e)
2424

2525
var reason = $"{e.Message} ({e.InnerException?.Message})"; // Lobby error type, then HTTP error type.
2626

27-
m_UnityServiceErrorMessagePublisher.Publish(new UnityServiceErrorMessage("Authentication Error", reason));
27+
m_UnityServiceErrorMessagePublisher.Publish(new UnityServiceErrorMessage("Authentication Error", reason, UnityServiceErrorMessage.Service.Authentication, e));
2828
}
2929

3030
public void DoSignInAsync(Action onSigninComplete, Action onFailed, InitializationOptions initializationOptions)
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1+
using Unity.Services.Core;
2+
13
namespace Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Infrastructure
24
{
35
public struct UnityServiceErrorMessage
46
{
7+
public enum Service
8+
{
9+
Authentication,
10+
Lobby,
11+
}
12+
513
public string Title;
614
public string Message;
7-
public UnityServiceErrorMessage(string title, string message)
15+
public Service AffectedService;
16+
public RequestFailedException OriginalException;
17+
18+
public UnityServiceErrorMessage(string title, string message, Service service, RequestFailedException originalException = null)
819
{
920
Title = title;
1021
Message = message;
22+
AffectedService = service;
23+
OriginalException = originalException;
1124
}
1225
}
1326
}

Assets/BossRoom/Scripts/Shared/Net/UnityServices/Lobbies/LobbyAPIInterface.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void OnServiceException(LobbyServiceException e)
6666

6767
var reason = $"{e.Message} ({e.InnerException?.Message})"; // Lobby error type, then HTTP error type.
6868

69-
m_UnityServiceErrorMessagePublisher.Publish(new UnityServiceErrorMessage("Lobby Error", reason));
69+
m_UnityServiceErrorMessagePublisher.Publish(new UnityServiceErrorMessage("Lobby Error", reason, UnityServiceErrorMessage.Service.Lobby, e));
7070
}
7171

7272
public void CreateLobbyAsync(string requesterUasId, string lobbyName, int maxPlayers, bool isPrivate, Dictionary<string, PlayerDataObject> hostUserData, Dictionary<string, DataObject> lobbyData, Action<Lobby> onComplete, Action onFailed)

Assets/BossRoom/Scripts/Shared/Net/UnityServices/Lobbies/LobbyServiceFacade.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void OnSuccess(Lobby lobby)
124124
return;
125125
}
126126
}
127-
m_UnityServiceErrorMessagePub.Publish(new UnityServiceErrorMessage("Host left the lobby","Disconnecting."));
127+
m_UnityServiceErrorMessagePub.Publish(new UnityServiceErrorMessage("Host left the lobby","Disconnecting.", UnityServiceErrorMessage.Service.Lobby));
128128
ForceLeaveLobbyAttempt();
129129
m_ApplicationController.QuitGame();
130130
}

0 commit comments

Comments
 (0)