Files
ichni_Official/Assets/Scripts/Online/Logic/LoginCacheManager.cs

148 lines
4.6 KiB
C#
Raw Normal View History

2026-06-15 14:54:30 +08:00
using IchniOnline.Online.Models;
2026-06-15 18:18:16 +08:00
using IchniOnline.Online.Network.Models;
2026-06-15 14:54:30 +08:00
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>
2026-06-15 18:18:16 +08:00
public static bool HasCachedLogin => HasValidSession;
2026-06-15 14:54:30 +08:00
/// <summary>
/// 获取缓存的登录数据,无缓存返回 null
/// </summary>
public static LoginCacheData CachedData
{
get
{
if (!ES3.KeyExists(ES3_KEY)) return null;
return ES3.Load<LoginCacheData>(ES3_KEY);
}
}
/// <summary>
2026-06-15 18:18:16 +08:00
/// 缓存的 JWT 令牌,无缓存或无会话返回 null
/// </summary>
public static string CachedJwtToken => CachedData?.jwtToken;
/// <summary>
/// 是否存在有效的服务端会话JWT 令牌存在且 hasServerSession 为 true
/// </summary>
public static bool HasValidSession => CachedData?.IsValid ?? false;
/// <summary>
/// 将 TapTap 登录结果写入本地缓存,保留已有的服务端会话数据
2026-06-15 14:54:30 +08:00
/// </summary>
public static void SaveFromTapTapAccount(TapTapAccount account)
{
if (account == null)
{
Debug.LogWarning("[LoginCacheManager] account 为 null跳过缓存");
return;
}
2026-06-15 18:18:16 +08:00
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;
2026-06-15 14:54:30 +08:00
ES3.Save(ES3_KEY, data);
Debug.Log($"[LoginCacheManager] 已缓存登录数据openId={data.openId}");
}
2026-06-15 18:18:16 +08:00
/// <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 数据");
}
2026-06-15 14:54:30 +08:00
/// <summary>
/// 写入模拟数据(供编辑器工具使用)
/// </summary>
public static void SaveMockData()
{
var data = new LoginCacheData(
"mock_openid_001",
"mock_unionid_001",
"MockUser",
"",
"mock@test.com"
);
2026-06-15 18:27:00 +08:00
data.hasServerSession = true;
data.jwtToken = "mock_jwt_token";
2026-06-15 14:54:30 +08:00
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] 已清除登录缓存");
}
}
}
}