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

40 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace game.PlayerDataStorage
{
public enum PlayerKVError
{
None, Validation, Unauthorized, Http, Network, Timeout, Cancelled, Protocol
}
public sealed class PlayerKVResult
{
public bool Success => Error == PlayerKVError.None;
public PlayerKVError Error { get; }
public int? StatusCode { get; }
// Only a successful Get has Data. Failure must never look like an empty save.
public IReadOnlyDictionary<string, string> Data { get; }
// Null means the response did not supply timestamp metadata; never substitute read time.
public IReadOnlyDictionary<string, DateTime> UpdatedAtUtc
{
get;
}
// A failed write that entered the transport may already have reached the server.
// This is conservative, including HTTP failures. Do not blindly replay the write.
public bool MayHaveCommitted { get; }
internal PlayerKVResult(PlayerKVError error, int? statusCode = null,
Dictionary<string, string> data = null, bool mayHaveCommitted = false,
Dictionary<string, DateTime> updatedAtUtc = null)
{
Error = error;
StatusCode = statusCode;
Data = data == null ? null : new ReadOnlyDictionary<string, string>(data);
UpdatedAtUtc = updatedAtUtc == null ? null : new ReadOnlyDictionary<string, DateTime>(updatedAtUtc);
MayHaveCommitted = mayHaveCommitted;
}
}
}