GameAssetUpdatePanel.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Fort23.Core;
  4. using Fort23.GameData;
  5. using hirdParty.DownloadSystem;
  6. using ThirdParty;
  7. using ThirdParty.DownloadSystem;
  8. using UnityEngine;
  9. public class GameAssetUpdatePanel
  10. {
  11. private AssetMD5Info remotelyMD5Info;
  12. public System.Action OnCallBack;
  13. private IDownloadUI _downloadUI;
  14. private List<MD5FileInfo> checkFileInfo = new List<MD5FileInfo>();
  15. public void StartUpdateAsset()
  16. {
  17. _downloadUI = HotSyncContent.DownloadUI;
  18. _downloadUI.SetMassge("开始校验资源");
  19. // DownloadFileData downloadFileData = new DownloadFileData();
  20. // downloadFileData.remoteUrl = AssetBundleLoadManager.Instance.RootPersistentBundleURL + "MD5.txt";
  21. // DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
  22. DownloadFileData downloadFileData2 = new DownloadFileData();
  23. downloadFileData2.remoteUrl =
  24. $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/MD5.txt";
  25. downloadFileData2.maxCount = int.MaxValue;
  26. downloadFileData2.timeOut = 10;
  27. DownloadHander downloadHander2 = FileDownloadSystem.Instance.DownloadFile(downloadFileData2);
  28. DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
  29. // downLoadHanderGroup.AddHander(downloadHander);
  30. downLoadHanderGroup.AddHander(downloadHander2);
  31. downLoadHanderGroup.OnCallBack = delegate { ComparisonMD5(downloadHander2); };
  32. downLoadHanderGroup.StartUpdate();
  33. }
  34. private void ComparisonMD5(DownloadHander downloadHander2)
  35. {
  36. _downloadUI.SetMassge("对比资源中");
  37. // AssetMD5Info localMD5Info = JsonHelper.FromJson<AssetMD5Info>(downloadHander.Text);
  38. string json = System.Text.UTF8Encoding.UTF8.GetString(downloadHander2.Data);
  39. remotelyMD5Info = JsonHelper.FromJson<AssetMD5Info>(json);
  40. Check();
  41. // List<MD5FileInfo> updateFlieInfo = new List<MD5FileInfo>();
  42. //
  43. // for (int i = 0; i < remotelyMD5Info.fileInfo.Count; i++)
  44. // {
  45. // MD5FileInfo remotelymd5FileInfo = remotelyMD5Info.fileInfo[i];
  46. // bool isYongYou = false;
  47. // for (int j = 0; j < localMD5Info.fileInfo.Count; j++)
  48. // {
  49. // MD5FileInfo localmd5FileInfo = localMD5Info.fileInfo[j];
  50. // if (remotelymd5FileInfo.fileName.Equals(localmd5FileInfo.fileName))
  51. // {
  52. // isYongYou = true;
  53. // if (!remotelymd5FileInfo.md5.Equals(localmd5FileInfo.md5))
  54. // {
  55. // updateFlieInfo.Add(remotelymd5FileInfo);
  56. // }
  57. // }
  58. // }
  59. //
  60. // if (!isYongYou)
  61. // {
  62. // updateFlieInfo.Add(remotelymd5FileInfo);
  63. // }
  64. // }
  65. //
  66. // DownloadFile(updateFlieInfo);
  67. }
  68. private async void DownloadFile(List<MD5FileInfo> updateFlieInfo)
  69. {
  70. Debug.Log("开始下载文件" + updateFlieInfo.Count);
  71. CTask<bool> cTask = CTask<bool>.Create();
  72. long size = 0;
  73. for (int i = 0; i < updateFlieInfo.Count; i++)
  74. {
  75. MD5FileInfo md5FileInfo = updateFlieInfo[i];
  76. if (md5FileInfo.size <= 0)
  77. {
  78. continue;
  79. }
  80. if (md5FileInfo.fileName.Contains("MD5"))
  81. {
  82. continue;
  83. }
  84. size += md5FileInfo.size;
  85. }
  86. string message = _downloadUI.GetLoadingText(46);
  87. message = string.Format(message, size / 1024 / 1024);
  88. _downloadUI.ShowPopWindow(0, message, () =>
  89. {
  90. _downloadUI.HidePopWindow();
  91. cTask.SetResult(false);
  92. Application.Quit();
  93. }, () =>
  94. {
  95. _downloadUI.HidePopWindow();
  96. cTask.SetResult(true);
  97. });
  98. await cTask;
  99. if (!cTask.GetResult())
  100. {
  101. return;
  102. }
  103. DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup();
  104. // long size = 0;
  105. for (int i = 0; i < updateFlieInfo.Count; i++)
  106. {
  107. MD5FileInfo md5FileInfo = updateFlieInfo[i];
  108. if (md5FileInfo.size <= 0)
  109. {
  110. continue;
  111. }
  112. if (md5FileInfo.fileName.Contains("MD5"))
  113. {
  114. continue;
  115. }
  116. DownloadFileData downloadFileData = new DownloadFileData();
  117. // size += md5FileInfo.size;
  118. downloadFileData.remoteUrl =
  119. $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/{md5FileInfo.fileName}";
  120. Debug.Log("下载文件" + downloadFileData.remoteUrl);
  121. downloadFileData.localPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL + md5FileInfo.fileName;
  122. DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData);
  123. downLoadHanderGroup.AddHander(fileDow);
  124. }
  125. float sizeM = size / 1024f / 1024f;
  126. SliderData sliderData = new SliderData();
  127. sliderData.maxValue = size;
  128. _downloadUI.SetMassge($"开始下载文件,个数{updateFlieInfo.Count} 大小{sizeM}");
  129. sliderData.CcurrValue = delegate
  130. {
  131. float m = downLoadHanderGroup.size / 1024f / 1024f;
  132. float speed = downLoadHanderGroup.speed / 1024f;
  133. _downloadUI.SetMassge(
  134. $"开始下载文件,个数{updateFlieInfo.Count} 大小{m.ToString(".00")}M / {sizeM.ToString(".00")}M 速度{speed.ToString(".00")} Kb");
  135. return downLoadHanderGroup.size;
  136. };
  137. _downloadUI.SetSlider(sliderData);
  138. downLoadHanderGroup.OnCallBack = Check;
  139. downLoadHanderGroup.StartUpdate();
  140. }
  141. private void Check()
  142. {
  143. _downloadUI.ClearSlider();
  144. checkFileInfo.Clear();
  145. checkFileInfo.AddRange(remotelyMD5Info.fileInfo);
  146. CheckFilePool _checkFileThrans = new CheckFilePool();
  147. _checkFileThrans.isStreamingAssetsPath = true;
  148. _checkFileThrans.streamingAssetsPath = AssetBundleLoadManager.Instance.RootStreamingBundleURL;
  149. SliderData sliderData = new SliderData();
  150. sliderData.maxValue = checkFileInfo.Count;
  151. _downloadUI.SetMassge($"校验本地文件");
  152. sliderData.CcurrValue = delegate
  153. {
  154. float m = _checkFileThrans.FileCount();
  155. if (_checkFileThrans.isFinish)
  156. {
  157. _downloadUI.ClearSlider();
  158. if (_checkFileThrans.shiBaiFile.Count > 0)
  159. {
  160. Debug.Log("还有错误文件需要下载");
  161. for (int i = 0; i < _checkFileThrans.shiBaiFile.Count; i++)
  162. {
  163. Debug.Log(_checkFileThrans.shiBaiFile[i].fileName);
  164. }
  165. DownloadFile(_checkFileThrans.shiBaiFile);
  166. }
  167. else
  168. {
  169. OnCallBack?.Invoke();
  170. }
  171. }
  172. else
  173. {
  174. _downloadUI.SetMassge(
  175. $"校验本地文件{m} / {sliderData.maxValue}");
  176. }
  177. return m;
  178. };
  179. _downloadUI.SetSlider(sliderData);
  180. string rootPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL;
  181. _checkFileThrans.Start(rootPath, checkFileInfo);
  182. }
  183. }