using System; using System.IO; using System.Collections; using System.Collections.Generic; namespace YooAsset { internal class PackageCache { internal class RecordWrapper { public string InfoFilePath { private set; get; } public string DataFilePath { private set; get; } public string DataFileCRC { private set; get; } public long DataFileSize { private set; get; } public RecordWrapper(string infoFilePath, string dataFilePath, string dataFileCRC, long dataFileSize) { InfoFilePath = infoFilePath; DataFilePath = dataFilePath; DataFileCRC = dataFileCRC; DataFileSize = dataFileSize; } } private readonly Dictionary _wrappers = new Dictionary(); /// /// 包裹名称 /// public string PackageName { private set; get; } public PackageCache(string packageName) { PackageName = packageName; } /// /// 清空所有数据 /// public void ClearAll() { _wrappers.Clear(); } /// /// 获取缓存文件总数 /// public int GetCachedFilesCount() { return _wrappers.Count; } /// /// 查询缓存记录 /// public bool IsCached(string cacheGUID) { return _wrappers.ContainsKey(cacheGUID); } /// /// 记录验证结果 /// public void Record(string cacheGUID, RecordWrapper wrapper) { if (_wrappers.ContainsKey(cacheGUID) == false) { _wrappers.Add(cacheGUID, wrapper); } else { throw new Exception("Should never get here !"); } } /// /// 丢弃验证结果 /// public void Discard(string cacheGUID) { if (_wrappers.ContainsKey(cacheGUID)) { _wrappers.Remove(cacheGUID); } } /// /// 获取记录对象 /// public RecordWrapper TryGetWrapper(string cacheGUID) { if (_wrappers.TryGetValue(cacheGUID, out RecordWrapper value)) return value; else return null; } internal List GetAllKeys() { List keys = new List(_wrappers.Keys.Count); var keyCollection = _wrappers.Keys; foreach (var key in keyCollection) { keys.Add(key); } return keys; } } }