Files
ft/Client/Assets/Scripts/Services/PlayerData/PlayFabSaveStore.cs

62 lines
1.8 KiB
C#

using Core.KV;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace game.PlayerDataStorage
{
public sealed class PlayFabSaveStore : IPlayerSaveStore
{
public Task<bool> SyncDataImmidiate(string key, string value)
{
return manager.SyncDataImmidiate(key, value);
}
private readonly PlayFabMgr manager;
private readonly CancellationToken lifetime;
public PlayFabSaveStore(IUserService user)
{
var originalManager = PlayFabMgr.Instance;
var originalLifetime = user.LoginLifetime;
manager = originalManager;
lifetime = originalLifetime;
}
public bool IsCurrent => manager != null && !lifetime.IsCancellationRequested;
public PlayerSaveReadResult Read(string key)
{
if (!IsCurrent)
{
return new PlayerSaveReadResult("StaleOrNotReady");
}
try
{
var value = manager.GetLocalData(key);
return new PlayerSaveReadResult(value != null, value);
}
catch (Exception ex)
{
return new PlayerSaveReadResult(ex.GetType().Name);
}
}
public PlayerSaveWriteResult Write(string key, string value, bool remoteStore = true)
{
if (!IsCurrent)
{
return new PlayerSaveWriteResult("StaleOrNotReady");
}
try
{
manager.UpdateUserDataValue(key, value, remoteStore);
return new PlayerSaveWriteResult();
}
catch (Exception ex)
{
return new PlayerSaveWriteResult(ex.GetType().Name);
}
}
}
}