using System.Collections; using System.Collections.Generic; using Fort23.Core; using Fort23.GameData; using hirdParty.DownloadSystem; using ThirdParty; using ThirdParty.DownloadSystem; using UnityEngine; public class GameAssetUpdatePanel { private AssetMD5Info remotelyMD5Info; public System.Action OnCallBack; private IDownloadUI _downloadUI; private List checkFileInfo = new List(); public void StartUpdateAsset() { _downloadUI = HotSyncContent.DownloadUI; _downloadUI.SetMassge("开始校验资源"); // DownloadFileData downloadFileData = new DownloadFileData(); // downloadFileData.remoteUrl = AssetBundleLoadManager.Instance.RootPersistentBundleURL + "MD5.txt"; // DownloadHander downloadHander = FileDownloadSystem.Instance.DownloadFile(downloadFileData); DownloadFileData downloadFileData2 = new DownloadFileData(); downloadFileData2.remoteUrl = $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/MD5.txt"; downloadFileData2.maxCount = int.MaxValue; downloadFileData2.timeOut = 10; DownloadHander downloadHander2 = FileDownloadSystem.Instance.DownloadFile(downloadFileData2); DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup(); // downLoadHanderGroup.AddHander(downloadHander); downLoadHanderGroup.AddHander(downloadHander2); downLoadHanderGroup.OnCallBack = delegate { ComparisonMD5(downloadHander2); }; downLoadHanderGroup.StartUpdate(); } private void ComparisonMD5(DownloadHander downloadHander2) { _downloadUI.SetMassge("对比资源中"); // AssetMD5Info localMD5Info = JsonHelper.FromJson(downloadHander.Text); string json = System.Text.UTF8Encoding.UTF8.GetString(downloadHander2.Data); remotelyMD5Info = JsonHelper.FromJson(json); Check(); // List updateFlieInfo = new List(); // // for (int i = 0; i < remotelyMD5Info.fileInfo.Count; i++) // { // MD5FileInfo remotelymd5FileInfo = remotelyMD5Info.fileInfo[i]; // bool isYongYou = false; // for (int j = 0; j < localMD5Info.fileInfo.Count; j++) // { // MD5FileInfo localmd5FileInfo = localMD5Info.fileInfo[j]; // if (remotelymd5FileInfo.fileName.Equals(localmd5FileInfo.fileName)) // { // isYongYou = true; // if (!remotelymd5FileInfo.md5.Equals(localmd5FileInfo.md5)) // { // updateFlieInfo.Add(remotelymd5FileInfo); // } // } // } // // if (!isYongYou) // { // updateFlieInfo.Add(remotelymd5FileInfo); // } // } // // DownloadFile(updateFlieInfo); } private async void DownloadFile(List updateFlieInfo) { Debug.Log("开始下载文件" + updateFlieInfo.Count); CTask cTask = CTask.Create(); long size = 0; for (int i = 0; i < updateFlieInfo.Count; i++) { MD5FileInfo md5FileInfo = updateFlieInfo[i]; if (md5FileInfo.size <= 0) { continue; } if (md5FileInfo.fileName.Contains("MD5")) { continue; } size += md5FileInfo.size; } string message = _downloadUI.GetLoadingText(46); message = string.Format(message, size / 1024 / 1024); _downloadUI.ShowPopWindow(0, message, () => { _downloadUI.HidePopWindow(); cTask.SetResult(false); Application.Quit(); }, () => { _downloadUI.HidePopWindow(); cTask.SetResult(true); }); await cTask; if (!cTask.GetResult()) { return; } DownLoadHanderGroup downLoadHanderGroup = new DownLoadHanderGroup(); // long size = 0; for (int i = 0; i < updateFlieInfo.Count; i++) { MD5FileInfo md5FileInfo = updateFlieInfo[i]; if (md5FileInfo.size <= 0) { continue; } if (md5FileInfo.fileName.Contains("MD5")) { continue; } DownloadFileData downloadFileData = new DownloadFileData(); // size += md5FileInfo.size; downloadFileData.remoteUrl = $"{HotSyncContent.AssetURL}/{HotSyncContent.platform}/{HotSyncContent.Currversion}/Bundle/{md5FileInfo.fileName}"; Debug.Log("下载文件" + downloadFileData.remoteUrl); downloadFileData.localPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL + md5FileInfo.fileName; DownloadHander fileDow = FileDownloadSystem.Instance.DownloadFile(downloadFileData); downLoadHanderGroup.AddHander(fileDow); } float sizeM = size / 1024f / 1024f; SliderData sliderData = new SliderData(); sliderData.maxValue = size; _downloadUI.SetMassge($"开始下载文件,个数{updateFlieInfo.Count} 大小{sizeM}"); sliderData.CcurrValue = delegate { float m = downLoadHanderGroup.size / 1024f / 1024f; float speed = downLoadHanderGroup.speed / 1024f; _downloadUI.SetMassge( $"开始下载文件,个数{updateFlieInfo.Count} 大小{m.ToString(".00")}M / {sizeM.ToString(".00")}M 速度{speed.ToString(".00")} Kb"); return downLoadHanderGroup.size; }; _downloadUI.SetSlider(sliderData); downLoadHanderGroup.OnCallBack = Check; downLoadHanderGroup.StartUpdate(); } private void Check() { _downloadUI.ClearSlider(); checkFileInfo.Clear(); checkFileInfo.AddRange(remotelyMD5Info.fileInfo); CheckFilePool _checkFileThrans = new CheckFilePool(); _checkFileThrans.isStreamingAssetsPath = true; _checkFileThrans.streamingAssetsPath = AssetBundleLoadManager.Instance.RootStreamingBundleURL; SliderData sliderData = new SliderData(); sliderData.maxValue = checkFileInfo.Count; _downloadUI.SetMassge($"校验本地文件"); sliderData.CcurrValue = delegate { float m = _checkFileThrans.FileCount(); if (_checkFileThrans.isFinish) { _downloadUI.ClearSlider(); if (_checkFileThrans.shiBaiFile.Count > 0) { Debug.Log("还有错误文件需要下载"); for (int i = 0; i < _checkFileThrans.shiBaiFile.Count; i++) { Debug.Log(_checkFileThrans.shiBaiFile[i].fileName); } DownloadFile(_checkFileThrans.shiBaiFile); } else { OnCallBack?.Invoke(); } } else { _downloadUI.SetMassge( $"校验本地文件{m} / {sliderData.maxValue}"); } return m; }; _downloadUI.SetSlider(sliderData); string rootPath = AssetBundleLoadManager.Instance.RootPersistentBundleURL; _checkFileThrans.Start(rootPath, checkFileInfo); } }