GameAssetUpdatePanel.cs 7.7 KB

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