chore(m2): 保存功能验收及后续清理前检查点

This commit is contained in:
Liubing\LB
2026-10-10 20:40:27 +08:00
parent d3c5394a55
commit 144e7f739f
110 changed files with 12672 additions and 7514 deletions

View File

@@ -98,7 +98,7 @@ namespace game
void UpdateProfileLv();
}
public partial class PlayFabUserService : IUserService, PlayerDataStorage.IKVUserLoadReceiver, PlayerDataStorage.IKVUserLifecycle
public class PlayFabUserService : IUserService
{
[Inject]
public IConfig config { get; set; }
@@ -106,7 +106,7 @@ namespace game
[Inject]
public ICustomServerMgr customServerMgr { get; set; }
public bool IsLogin => !kvControlledInstance && PlayFabClientAPI.IsClientLoggedIn() && IsAuthorized;
public bool IsLogin => PlayFabClientAPI.IsClientLoggedIn() && IsAuthorized;
public bool IsAuthorized => InternalId != 0 && apiSession != null && apiSession.IsAuthenticated;
@@ -145,18 +145,11 @@ namespace game
return "Angler#" + (string.IsNullOrEmpty(id) ? string.Empty : id.Substring(0, Math.Min(5, id.Length)));
}
public PlayFabUserService() : this(null) { }
internal PlayFabUserService(PlayerDataStorage.PlayerKVControlledLoadCapability capability)
public PlayFabUserService()
{
kvControlledInstance = capability != null;
if (kvControlledInstance) return;
GContext.OnEvent<EvtAPISvrUnauthorized>().Subscribe(evt =>
{
if (evt.SessionVersion != customServerMgr.SessionVersion) return;
#if UNITY_EDITOR && !SERVICE_HOST
if(game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled) { game.PlayerDataStorage.PlayerKVGameplayLoop.Fault("API unauthorized; restart required."); return; }
#endif
InternalId = 0;
if (PlayFabClientAPI.IsClientLoggedIn()) _ = LoginApiServer();
});
@@ -168,6 +161,16 @@ namespace game
private readonly System.Threading.SemaphoreSlim loginGate = new System.Threading.SemaphoreSlim(1, 1);
public virtual Task<ELoginStep> Login(Action<int> progress, bool tyrLoginByToken = true) => LoginWithBackend(progress,CaptureSaveBackend());
internal string CaptureSaveBackend()
{
return config == null ? "playfab" : config.Get<string>("SaveBackend", "playfab");
}
internal bool RejectSaveBackend(string backend)
{
return backend != "playfab";
}
protected async Task<ELoginStep> LoginWithBackend(Action<int> progress,string backend)
{
var generation = logoutGeneration;
@@ -189,9 +192,6 @@ namespace game
private async Task<ELoginStep> LoginCore(Action<int> progress, int generation)
{
#if UNITY_EDITOR && !SERVICE_HOST
if(game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled) return await LoginKVGameplayLoopAsync(progress,generation);
#endif
if (IsLogin)
{
progress?.Invoke(2);
@@ -351,11 +351,7 @@ namespace game
var info_request_parameters = new GetPlayerCombinedInfoRequestParams
{
GetUserAccountInfo = true,
#if UNITY_EDITOR && !SERVICE_HOST
GetUserData = !game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled,
#else
GetUserData = true,
#endif
GetPlayerProfile = true,
ProfileConstraints = new PlayerProfileViewConstraints()
{
@@ -518,9 +514,6 @@ namespace game
//InitData should invoke after local time adjusted.
//save login time to local storage.
#if UNITY_EDITOR && !SERVICE_HOST
if(!game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled)
#endif
InitData(playfabUserData, UserId);
return true;
@@ -560,9 +553,6 @@ namespace game
return false;
}
customServerMgr.UseAccountSession(session);
#if UNITY_EDITOR && !SERVICE_HOST
if(game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled) return true; // Identity is published only after all KV modules load.
#endif
InternalId = session.InternalId;
GContext.Publish(new EvtAPISvrLoginSuccess
{
@@ -672,17 +662,6 @@ namespace game
public virtual void Logout()
{
#if UNITY_EDITOR && !SERVICE_HOST
if(game.PlayerDataStorage.PlayerKVGameplayLoop.Enabled) { _=StopKVGameplayLoopAsync(); return; }
#endif
if(kvControlledInstance)
{
logoutGeneration++; InternalId=0; UserId=null; DisplayName=null; AvatarUrl=null;
_=kvCoordinator?.Revoke();
var previous=loginLifetime; loginLifetime=new System.Threading.CancellationTokenSource();
try { previous.Cancel(); } finally { previous.Dispose(); }
return;
}
logoutGeneration++;
apiLoginGeneration++;