You've already forked CC-Framework.BriskGameServer
89 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|