Files
CC-Framework.BriskGameServer/PackageSource/com.foldcc.cc-framework.brisk-game-server/Runtime/Storage/BriskPlayerPrefsTokenStore.cs

89 lines
2.7 KiB
C#

using System;
using System.Threading.Tasks;
using UnityEngine;
public sealed class BriskPlayerPrefsTokenStore : IBriskTokenStore
{
private const string KeyPrefix = "BriskSdk.Session.";
public Task SaveAsync(BriskStoredSession session)
{
if (session == null)
{
ClearStoredKeys();
return Task.CompletedTask;
}
SetString("access_token", session.AccessToken);
SetString("expires_at", session.ExpiresAt.HasValue ? session.ExpiresAt.Value.ToUnixTimeSeconds().ToString() : null);
SetString("player_id", session.PlayerId);
SetString("project_account_id", session.ProjectAccountId);
SetString("login_provider", session.LoginProvider);
SetString("login_user_id", session.LoginUserId);
PlayerPrefs.Save();
return Task.CompletedTask;
}
public Task<BriskStoredSession> LoadAsync()
{
var accessToken = GetString("access_token");
if (string.IsNullOrWhiteSpace(accessToken))
{
return Task.FromResult<BriskStoredSession>(null);
}
DateTimeOffset? expiresAt = null;
var expiresAtText = GetString("expires_at");
if (long.TryParse(expiresAtText, out var unixSeconds))
{
expiresAt = DateTimeOffset.FromUnixTimeSeconds(unixSeconds);
}
var session = new BriskStoredSession
{
AccessToken = accessToken,
ExpiresAt = expiresAt,
PlayerId = GetString("player_id"),
ProjectAccountId = GetString("project_account_id"),
LoginProvider = GetString("login_provider"),
LoginUserId = GetString("login_user_id")
};
return Task.FromResult(session);
}
public Task ClearAsync()
{
ClearStoredKeys();
PlayerPrefs.Save();
return Task.CompletedTask;
}
private static void ClearStoredKeys()
{
PlayerPrefs.DeleteKey(KeyPrefix + "access_token");
PlayerPrefs.DeleteKey(KeyPrefix + "expires_at");
PlayerPrefs.DeleteKey(KeyPrefix + "player_id");
PlayerPrefs.DeleteKey(KeyPrefix + "project_account_id");
PlayerPrefs.DeleteKey(KeyPrefix + "login_provider");
PlayerPrefs.DeleteKey(KeyPrefix + "login_user_id");
}
private static string GetString(string name)
{
var key = KeyPrefix + name;
return PlayerPrefs.HasKey(key) ? PlayerPrefs.GetString(key) : null;
}
private static void SetString(string name, string value)
{
var key = KeyPrefix + name;
if (string.IsNullOrEmpty(value))
{
PlayerPrefs.DeleteKey(key);
return;
}
PlayerPrefs.SetString(key, value);
}
}