From 5f21d84b1d6e3e23055b34a05f407c30f6f01b80 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Thu, 21 Aug 2025 22:37:43 +0100 Subject: [PATCH] add setting for cachePlayerOnIdentify --- .../Talo/Runtime/APIs/PlayersAPI.cs | 46 ++++++++++++------- .../Talo/Runtime/Entities/PlayerAlias.cs | 5 ++ .../Talo/Runtime/TaloSettings.cs | 3 ++ 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs index 0d52799..ac8b2fe 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs @@ -33,7 +33,6 @@ private async Task HandleIdentifySuccess(PlayerAlias alias, string socke Talo.Socket.SetSocketToken(socketToken); } - WriteOfflineAlias(); InvokeIdentifiedEvent(); return alias.player; @@ -45,16 +44,7 @@ public async Task Identify(string service, string identifier) if (Talo.IsOffline()) { - var offlineAlias = GetOfflineAlias(); - if (offlineAlias != null) - { - return await HandleIdentifySuccess(offlineAlias); - } - else - { - OnIdentificationFailed?.Invoke(); - throw new Exception("No offline player alias found."); - } + return await IdentifyOffline(service, identifier); } var uri = new Uri($"{baseUrl}/identify?service={service}&identifier={identifier}"); @@ -64,7 +54,9 @@ public async Task Identify(string service, string identifier) var json = await Call(uri, "GET"); var res = JsonUtility.FromJson(json); - return await HandleIdentifySuccess(res.alias, res.socketToken); + var alias = res.alias; + WriteOfflineAlias(alias); + return await HandleIdentifySuccess(alias, res.socketToken); } catch { @@ -96,7 +88,7 @@ public async Task Update() var res = JsonUtility.FromJson(json); Talo.CurrentPlayer = res.player; - WriteOfflineAlias(); + WriteOfflineAlias(Talo.CurrentAlias); return Talo.CurrentPlayer; } @@ -120,15 +112,37 @@ public async Task Find(string playerId) return res.player; } - private void WriteOfflineAlias() + private async Task IdentifyOffline(string service, string identifier) + { + var offlineAlias = GetOfflineAlias(); + if (offlineAlias != null && offlineAlias.MatchesIdentifyRequest(service, identifier)) + { + return await HandleIdentifySuccess(offlineAlias); + } + else + { + try + { + File.Delete(_offlineDataPath); + } + finally + { + OnIdentificationFailed?.Invoke(); + throw new Exception("No offline player alias found."); + } + } + } + + private void WriteOfflineAlias(PlayerAlias alias) { - var content = JsonUtility.ToJson(Talo.CurrentAlias); + if (!Talo.Settings.cachePlayerOnIdentify) return; + var content = JsonUtility.ToJson(alias); Talo.Crypto.WriteFileContent(_offlineDataPath, content); } private PlayerAlias GetOfflineAlias() { - if (!File.Exists(_offlineDataPath)) return null; + if (!Talo.Settings.cachePlayerOnIdentify || !File.Exists(_offlineDataPath)) return null; return JsonUtility.FromJson(Talo.Crypto.ReadFileContent(_offlineDataPath)); } } diff --git a/Assets/Talo Game Services/Talo/Runtime/Entities/PlayerAlias.cs b/Assets/Talo Game Services/Talo/Runtime/Entities/PlayerAlias.cs index c24e226..41b5ee3 100644 --- a/Assets/Talo Game Services/Talo/Runtime/Entities/PlayerAlias.cs +++ b/Assets/Talo Game Services/Talo/Runtime/Entities/PlayerAlias.cs @@ -7,5 +7,10 @@ public class PlayerAlias public string service, identifier; public Player player; public string lastSeenAt, createdAt, updatedAt; + + public bool MatchesIdentifyRequest(string service, string identifier) + { + return this.service == service && this.identifier == identifier; + } } } diff --git a/Assets/Talo Game Services/Talo/Runtime/TaloSettings.cs b/Assets/Talo Game Services/Talo/Runtime/TaloSettings.cs index f103079..5a933cf 100644 --- a/Assets/Talo Game Services/Talo/Runtime/TaloSettings.cs +++ b/Assets/Talo Game Services/Talo/Runtime/TaloSettings.cs @@ -31,5 +31,8 @@ public class TaloSettings : ScriptableObject [Tooltip("If a valid session token is found, automatically authenticate the player")] public bool autoStartSession = true; + + [Tooltip("If enabled, Talo will automatically cache the player after a successful online identification for use in later offline sessions")] + public bool cachePlayerOnIdentify = true; } }