62 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|