Files
ichni_Official/Assets/Scripts/Online/Logic/LoginCacheManager.cs
2026-06-15 18:18:16 +08:00

146 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using IchniOnline.Online.Models;
using IchniOnline.Online.Network.Models;
using TapSDK.Login;
using UnityEngine;
namespace IchniOnline.Online.Logic
{
/// <summary>
/// 登录缓存的读写管理器。所有方法均为静态,可在任意位置调用。
/// 使用 ES3 进行本地持久化。
/// </summary>
public static class LoginCacheManager
{
private const string ES3_KEY = "Ichni_LoginCache";
/// <summary>
/// 本地是否存在有效的登录缓存
/// </summary>
public static bool HasCachedLogin => HasValidSession;
/// <summary>
/// 获取缓存的登录数据,无缓存返回 null
/// </summary>
public static LoginCacheData CachedData
{
get
{
if (!ES3.KeyExists(ES3_KEY)) return null;
return ES3.Load<LoginCacheData>(ES3_KEY);
}
}
/// <summary>
/// 缓存的 JWT 令牌,无缓存或无会话返回 null
/// </summary>
public static string CachedJwtToken => CachedData?.jwtToken;
/// <summary>
/// 是否存在有效的服务端会话JWT 令牌存在且 hasServerSession 为 true
/// </summary>
public static bool HasValidSession => CachedData?.IsValid ?? false;
/// <summary>
/// 将 TapTap 登录结果写入本地缓存,保留已有的服务端会话数据
/// </summary>
public static void SaveFromTapTapAccount(TapTapAccount account)
{
if (account == null)
{
Debug.LogWarning("[LoginCacheManager] account 为 null跳过缓存");
return;
}
LoginCacheData data;
if (ES3.KeyExists(ES3_KEY))
{
data = ES3.Load<LoginCacheData>(ES3_KEY) ?? new LoginCacheData();
}
else
{
data = new LoginCacheData();
}
data.openId = account.openId;
data.unionId = account.unionId;
data.name = account.name;
data.avatar = account.avatar;
data.email = account.email;
ES3.Save(ES3_KEY, data);
Debug.Log($"[LoginCacheManager] 已缓存登录数据openId={data.openId}");
}
/// <summary>
/// 保存服务端认证会话JWT + 用户信息),保留已有的 TapTap 数据
/// </summary>
public static void SaveAuthSession(string jwtToken, LoginResponseDto response)
{
if (string.IsNullOrEmpty(jwtToken) || response == null)
{
Debug.LogWarning("[LoginCacheManager] jwtToken 或 response 为 null跳过缓存");
return;
}
LoginCacheData data;
if (ES3.KeyExists(ES3_KEY))
{
data = ES3.Load<LoginCacheData>(ES3_KEY) ?? new LoginCacheData();
}
else
{
data = new LoginCacheData();
}
data.UpdateFromServerResponse(response);
ES3.Save(ES3_KEY, data);
Debug.Log($"[LoginCacheManager] 已缓存服务端会话userId={data.userId}");
}
/// <summary>
/// 清除服务端会话数据,保留 TapTap 原始数据
/// </summary>
public static void ClearSession()
{
if (!ES3.KeyExists(ES3_KEY)) return;
var data = ES3.Load<LoginCacheData>(ES3_KEY);
if (data == null) return;
data.ClearServerSession();
ES3.Save(ES3_KEY, data);
Debug.Log("[LoginCacheManager] 已清除服务端会话,保留 TapTap 数据");
}
/// <summary>
/// 写入模拟数据(供编辑器工具使用)
/// </summary>
public static void SaveMockData()
{
var data = new LoginCacheData(
"mock_openid_001",
"mock_unionid_001",
"MockUser",
"",
"mock@test.com"
);
ES3.Save(ES3_KEY, data);
Debug.Log($"[LoginCacheManager] 已写入模拟缓存数据");
}
/// <summary>
/// 清除本地登录缓存
/// </summary>
public static void Clear()
{
if (ES3.KeyExists(ES3_KEY))
{
ES3.DeleteKey(ES3_KEY);
Debug.Log("[LoginCacheManager] 已清除登录缓存");
}
}
}
}