Skip to content

Commit 193974c

Browse files
committed
fix: Set the first ulid being used each play session as the default for
requests
1 parent 457de35 commit 193974c

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

Runtime/Client/LootLockerStateData.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ public static LootLockerPlayerData GetStateForPlayerOrDefaultStateOrEmpty(string
195195
}
196196
string playerULIDToGetDataFor = string.IsNullOrEmpty(playerULID) ? ActiveMetaData.DefaultPlayer : playerULID;
197197

198+
// Make this player the default for requests if there is no default yet or if the current default is not currently active
199+
bool shouldBeMadeDefault = ActivePlayerData.Count == 0 && !playerULIDToGetDataFor.Equals(ActiveMetaData.DefaultPlayer, StringComparison.OrdinalIgnoreCase);
200+
198201
if (ActivePlayerData.TryGetValue(playerULIDToGetDataFor, out var data))
199202
{
200203
return data;
@@ -204,6 +207,10 @@ public static LootLockerPlayerData GetStateForPlayerOrDefaultStateOrEmpty(string
204207
{
205208
if (ActivePlayerData.TryGetValue(playerULIDToGetDataFor, out var data2))
206209
{
210+
if (shouldBeMadeDefault)
211+
{
212+
SetDefaultPlayerULID(data2.ULID);
213+
}
207214
return data2;
208215
}
209216
}
@@ -264,7 +271,7 @@ public static bool SetPlayerData(LootLockerPlayerData updatedPlayerData)
264271
{
265272
ActiveMetaData.WhiteLabelEmailToPlayerUlidMap[updatedPlayerData.WhiteLabelEmail] = updatedPlayerData.ULID;
266273
}
267-
if (string.IsNullOrEmpty(ActiveMetaData.DefaultPlayer))
274+
if (string.IsNullOrEmpty(ActiveMetaData.DefaultPlayer) || !ActivePlayerData.ContainsKey(ActiveMetaData.DefaultPlayer))
268275
{
269276
SetDefaultPlayerULID(updatedPlayerData.ULID);
270277
}

Tests/LootLockerTests/PlayMode/MultiUserTests.cs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ public IEnumerator MultiUser_SetPlayerDataWhenPlayerCachesExistButNoPlayersAreAc
806806

807807
// When
808808
bool loginCompleted = false;
809-
LootLockerSDKManager.StartGuestSession(response =>
809+
LootLockerSDKManager.StartGuestSession("completely-novel-identifier", response =>
810810
{
811811
ulids.Add(response.player_ulid);
812812
loginCompleted = true;
@@ -826,6 +826,55 @@ public IEnumerator MultiUser_SetPlayerDataWhenPlayerCachesExistButNoPlayersAreAc
826826

827827
yield return null;
828828
}
829+
830+
[UnityTest, Category("LootLocker"), Category("LootLockerCI"), Category("LootLockerCIFast")]
831+
public IEnumerator MultiUser_GetPlayerDataWhenPlayerCachesExistButNoPlayersAreActive_GetsPlayerAndSetsDefault()
832+
{
833+
// Setup Succeeded
834+
Assert.IsFalse(SetupFailed, "Setup did not succeed");
835+
836+
// Given
837+
List<string> ulids = new List<string>();
838+
int guestUsersToCreate = 3;
839+
for (int i = 0; i < guestUsersToCreate; i++)
840+
{
841+
bool guestLoginCompleted = false;
842+
LootLockerSDKManager.StartGuestSession(response =>
843+
{
844+
ulids.Add(response.player_ulid);
845+
guestLoginCompleted = true;
846+
});
847+
yield return new WaitUntil(() => guestLoginCompleted);
848+
}
849+
850+
foreach (var ulid in ulids)
851+
{
852+
LootLockerStateData.SetPlayerULIDToInactive(ulid);
853+
}
854+
855+
// When
856+
bool pingCompleted = false;
857+
string pingUlid = null;
858+
LootLockerSDKManager.Ping(response =>
859+
{
860+
pingUlid = response.requestContext.player_ulid;
861+
pingCompleted = true;
862+
}, ulids[ulids.Count - 1]);
863+
yield return new WaitUntil(() => pingCompleted);
864+
865+
// Then
866+
int postPingActivePlayerCount = LootLockerStateData.GetActivePlayerULIDs().Count;
867+
var postPingDefaultPlayerPlayerData = LootLockerStateData.GetStateForPlayerOrDefaultStateOrEmpty(null);
868+
var postPingDefaultPlayerUlid = LootLockerStateData.GetDefaultPlayerULID();
869+
870+
Assert.AreEqual(1, postPingActivePlayerCount);
871+
Assert.IsNotNull(postPingDefaultPlayerUlid);
872+
Assert.IsNotNull(postPingDefaultPlayerPlayerData);
873+
Assert.AreEqual(ulids[ulids.Count - 1], postPingDefaultPlayerUlid);
874+
Assert.AreEqual(ulids[ulids.Count - 1], postPingDefaultPlayerPlayerData.ULID);
875+
876+
yield return null;
877+
}
829878

830879
[UnityTest, Category("LootLocker"), Category("LootLockerCI"), Category("LootLockerCIFast")]
831880
public IEnumerator MultiUser_GetPlayerUlidFromWLEmailWhenPlayerIsCached_ReturnsCorrectULID()

0 commit comments

Comments
 (0)