CacheManager.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. namespace YooAsset
  6. {
  7. internal class CacheManager
  8. {
  9. internal class RecordWrapper
  10. {
  11. public string InfoFilePath { private set; get; }
  12. public string DataFilePath { private set; get; }
  13. public string DataFileCRC { private set; get; }
  14. public long DataFileSize { private set; get; }
  15. public RecordWrapper(string infoFilePath, string dataFilePath, string dataFileCRC, long dataFileSize)
  16. {
  17. InfoFilePath = infoFilePath;
  18. DataFilePath = dataFilePath;
  19. DataFileCRC = dataFileCRC;
  20. DataFileSize = dataFileSize;
  21. }
  22. }
  23. private readonly Dictionary<string, RecordWrapper> _wrappers = new Dictionary<string, RecordWrapper>();
  24. /// <summary>
  25. /// 所属包裹
  26. /// </summary>
  27. public readonly string PackageName;
  28. /// <summary>
  29. /// 验证级别
  30. /// </summary>
  31. public readonly EVerifyLevel BootVerifyLevel;
  32. public CacheManager(string packageName, EVerifyLevel bootVerifyLevel)
  33. {
  34. PackageName = packageName;
  35. BootVerifyLevel = bootVerifyLevel;
  36. }
  37. /// <summary>
  38. /// 清空所有数据
  39. /// </summary>
  40. public void ClearAll()
  41. {
  42. _wrappers.Clear();
  43. }
  44. /// <summary>
  45. /// 查询缓存记录
  46. /// </summary>
  47. public bool IsCached(string cacheGUID)
  48. {
  49. return _wrappers.ContainsKey(cacheGUID);
  50. }
  51. /// <summary>
  52. /// 记录验证结果
  53. /// </summary>
  54. public void Record(string cacheGUID, RecordWrapper wrapper)
  55. {
  56. if (_wrappers.ContainsKey(cacheGUID) == false)
  57. {
  58. _wrappers.Add(cacheGUID, wrapper);
  59. }
  60. else
  61. {
  62. throw new Exception("Should never get here !");
  63. }
  64. }
  65. /// <summary>
  66. /// 丢弃验证结果并删除缓存文件
  67. /// </summary>
  68. public void Discard(string cacheGUID)
  69. {
  70. var wrapper = TryGetWrapper(cacheGUID);
  71. if (wrapper != null)
  72. {
  73. try
  74. {
  75. string dataFilePath = wrapper.DataFilePath;
  76. FileInfo fileInfo = new FileInfo(dataFilePath);
  77. if (fileInfo.Exists)
  78. fileInfo.Directory.Delete(true);
  79. }
  80. catch (Exception e)
  81. {
  82. YooLogger.Error($"Failed to delete cache file ! {e.Message}");
  83. }
  84. }
  85. if (_wrappers.ContainsKey(cacheGUID))
  86. {
  87. _wrappers.Remove(cacheGUID);
  88. }
  89. }
  90. /// <summary>
  91. /// 获取记录对象
  92. /// </summary>
  93. public RecordWrapper TryGetWrapper(string cacheGUID)
  94. {
  95. if (_wrappers.TryGetValue(cacheGUID, out RecordWrapper value))
  96. return value;
  97. else
  98. return null;
  99. }
  100. /// <summary>
  101. /// 获取缓存文件总数
  102. /// </summary>
  103. public int GetAllCachedFilesCount()
  104. {
  105. return _wrappers.Count;
  106. }
  107. /// <summary>
  108. /// 获取缓存GUID集合
  109. /// </summary>
  110. public List<string> GetAllCachedGUIDs()
  111. {
  112. List<string> keys = new List<string>(_wrappers.Keys.Count);
  113. var keyCollection = _wrappers.Keys;
  114. foreach (var key in keyCollection)
  115. {
  116. keys.Add(key);
  117. }
  118. return keys;
  119. }
  120. }
  121. }