From f2e6da649bba80f617524359059dbb01cb09abf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Fri, 27 Dec 2024 17:08:39 +0800 Subject: [PATCH] update resource package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构了下载器的委托方法 --- .../Operation/DownloaderDefine.cs | 97 +++++++++++++++++++ .../Operation/DownloaderDefine.cs.meta | 11 +++ .../Operation/DownloaderOperation.cs | 88 ++++++++++++++--- 3 files changed, 181 insertions(+), 15 deletions(-) create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs new file mode 100644 index 00000000..c6049b53 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs @@ -0,0 +1,97 @@ + +namespace YooAsset +{ + /// + /// 下载器结束 + /// + public struct DownloaderFinishData + { + /// + /// 所属包裹名称 + /// + public string PackageName; + + /// + /// 是否成功 + /// + public bool Succeed; + } + + /// + /// 下载器相关的更新数据 + /// + public struct DownloadUpdateData + { + /// + /// 所属包裹名称 + /// + public string PackageName; + + /// + /// 下载进度 (0-1f) + /// + public float Progress; + + /// + /// 下载文件总数 + /// + public int TotalDownloadCount; + + /// + /// 当前完成的下载文件数量 + /// + public int CurrentDownloadCount; + + /// + /// 下载数据总大小(单位:字节) + /// + public long TotalDownloadBytes; + + /// + /// 当前完成的下载数据大小(单位:字节) + /// + public long CurrentDownloadBytes; + } + + /// + /// 下载器相关的错误数据 + /// + public struct DownloadErrorData + { + /// + /// 所属包裹名称 + /// + public string PackageName; + + /// + /// 下载失败的文件名称 + /// + public string FileName; + + /// + /// 错误信息 + /// + public string ErrorInfo; + } + + /// + /// 下载器相关的文件数据 + /// + public struct DownloadFileData + { + /// + /// 所属包裹名称 + /// + public string PackageName; + + /// + /// 下载的文件名称 + /// + public string FileName; + + /// + /// 下载的文件大小 + /// + public long FileSize; + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta new file mode 100644 index 00000000..89c05103 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6602c4be2ef295546b7bbb328de8fb0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs index f713f1e0..1997d577 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs @@ -15,10 +15,27 @@ namespace YooAsset private const int MAX_LOADER_COUNT = 64; - public delegate void OnDownloadOver(bool isSucceed); - public delegate void OnDownloadProgress(int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes); - public delegate void OnDownloadError(string fileName, string error); - public delegate void OnStartDownloadFile(string fileName, long sizeBytes); + #region 委托定义 + /// + /// 下载器结束 + /// + public delegate void DownloaderFinish(DownloaderFinishData data); + + /// + /// 下载进度更新 + /// + public delegate void DownloadUpdate(DownloadUpdateData data); + + /// + /// 下载发生错误 + /// + public delegate void DownloadError(DownloadErrorData data); + + /// + /// 开始下载某个文件 + /// + public delegate void DownloadFileBegin(DownloadFileData data); + #endregion private readonly string _packageName; private readonly int _downloadingMaxNumber; @@ -67,23 +84,23 @@ namespace YooAsset /// /// 当下载器结束(无论成功或失败) /// - public OnDownloadOver OnDownloadOverCallback { set; get; } + public DownloaderFinish DownloadFinishCallback { set; get; } /// /// 当下载进度发生变化 /// - public OnDownloadProgress OnDownloadProgressCallback { set; get; } + public DownloadUpdate DownloadUpdateCallback { set; get; } /// - /// 当某个文件下载失败 + /// 当下载器发生错误 /// - public OnDownloadError OnDownloadErrorCallback { set; get; } + public DownloadError DownloadErrorCallback { set; get; } /// /// 当开始下载某个文件 /// - public OnStartDownloadFile OnStartDownloadFileCallback { set; get; } - + public DownloadFileBegin DownloadFileBeginCallback { set; get; } + internal DownloaderOperation(string packageName, List downloadList, int downloadingMaxNumber, int failedTryAgain, int timeout) { @@ -160,7 +177,18 @@ namespace YooAsset _lastDownloadBytes = downloadBytes; _lastDownloadCount = _cachedDownloadCount; Progress = (float)_lastDownloadBytes / TotalDownloadBytes; - OnDownloadProgressCallback?.Invoke(TotalDownloadCount, _lastDownloadCount, TotalDownloadBytes, _lastDownloadBytes); + + if (DownloadUpdateCallback != null) + { + var data = new DownloadUpdateData(); + data.PackageName = _packageName; + data.Progress = Progress; + data.TotalDownloadCount = TotalDownloadCount; + data.CurrentDownloadCount = _lastDownloadCount; + data.TotalDownloadBytes = TotalDownloadBytes; + data.CurrentDownloadBytes = _lastDownloadBytes; + DownloadUpdateCallback.Invoke(data); + } } // 动态创建新的下载器到最大数量限制 @@ -177,7 +205,15 @@ namespace YooAsset var downloader = bundleInfo.CreateDownloader(_failedTryAgain, _timeout); _downloaders.Add(downloader); _bundleInfoList.RemoveAt(index); - OnStartDownloadFileCallback?.Invoke(bundleInfo.Bundle.BundleName, bundleInfo.Bundle.FileSize); + + if (DownloadFileBeginCallback != null) + { + var data = new DownloadFileData(); + data.PackageName = _packageName; + data.FileName = bundleInfo.Bundle.BundleName; + data.FileSize = bundleInfo.Bundle.FileSize; + DownloadFileBeginCallback.Invoke(data); + } } } @@ -191,15 +227,37 @@ namespace YooAsset _steps = ESteps.Done; Status = EOperationStatus.Failed; Error = $"Failed to download file : {bundleName}"; - OnDownloadErrorCallback?.Invoke(bundleName, failedDownloader.Error); - OnDownloadOverCallback?.Invoke(false); + + if (DownloadErrorCallback != null) + { + var data = new DownloadErrorData(); + data.PackageName = _packageName; + data.FileName = bundleName; + data.ErrorInfo = failedDownloader.Error; + DownloadErrorCallback.Invoke(data); + } + + if (DownloadFinishCallback != null) + { + var data = new DownloaderFinishData(); + data.PackageName = _packageName; + data.Succeed = false; + DownloadFinishCallback.Invoke(data); + } } else { // 结算成功 _steps = ESteps.Done; Status = EOperationStatus.Succeed; - OnDownloadOverCallback?.Invoke(true); + + if (DownloadFinishCallback != null) + { + var data = new DownloaderFinishData(); + data.PackageName = _packageName; + data.Succeed = true; + DownloadFinishCallback.Invoke(data); + } } } }