using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Newtonsoft.Json;
using UnityEngine.Assertions;
namespace Ubisoft.Hotel.Cache
{
///
/// Basic cache driver that works with object types and returns json data
///
public class ConsumerCacheDriver : AbstractCacheDriver
{
///
/// Key: Data type identifier, Value: Name of the file where data is stored
///
private Dictionary m_filepaths;
///
/// Use this method to instantiate and initialize the driver
///
/// The cache settings used to initialize the driver
/// An instance of ConsumerCacheDriver
public static async UniTask CreateAsync(string rootFolder, CacheSettings settings)
{
Assert.IsFalse(string.IsNullOrEmpty(rootFolder));
ConsumerCacheDriver driver = new ConsumerCacheDriver();
driver.RootFolder = rootFolder;
await driver.InitAsync(settings);
return driver;
}
public void RegisterFileType(string key, string filepath)
{
if(!m_filepaths.ContainsKey(key))
{
m_filepaths.Add(key, filepath);
}
}
public void SetFileTypes(Dictionary filepaths)
{
m_filepaths = filepaths;
}
public void UnregisterFileType(string key)
{
m_filepaths.Remove(key);
}
public async UniTask GetDataAsync(string key, string filter = "")
{
string data = null;
if (m_filepaths.TryGetValue(key, out string filepath))
{
data = await CacheManager.GetDataAsync(GetRelativeCacheFilepath(filepath), filter);
}
return data;
}
public async UniTask SaveDataAsync(string key, object dataObject, string filter = "")
{
if(m_filepaths.TryGetValue(key, out string filepath))
{
string json = JsonConvert.SerializeObject(dataObject);
await CacheManager.UpdateDataAsync(filepath, json, filter);
}
}
public void InvalidateData(string key, string filter = "")
{
if (m_filepaths.TryGetValue(key, out string filepath))
{
CacheManager.InvalidateFile(GetRelativeCacheFilepath(filepath), filter);
}
}
}
}