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); } } } }