refactor : 重构代码

This commit is contained in:
何冠峰
2026-01-16 14:37:04 +08:00
parent 611ac886b3
commit 3e3661ad95
18 changed files with 258 additions and 309 deletions

View File

@@ -6,22 +6,22 @@ namespace YooAsset
/// <summary>
/// 下载是否已经完成
/// </summary>
public bool IsDone;
public bool IsDone { get; set; }
/// <summary>
/// 下载进度0-1f)
/// </summary>
public float Progress;
public float Progress { get; set; }
/// <summary>
/// 下载文件的总大小
/// </summary>
public long TotalBytes;
public long TotalBytes { get; set; }
/// <summary>
/// 已经下载的文件大小
/// </summary>
public long DownloadedBytes;
public long DownloadedBytes { get; set; }
public static DownloadStatus CreateDefaultStatus()
{

View File

@@ -6,12 +6,12 @@ namespace YooAsset
/// <summary>
/// 释放所有资源句柄,防止卸载过程中触发完成回调!
/// </summary>
public bool ReleaseAllHandles { private set; get; }
public bool ReleaseAllHandles { set; get; }
/// <summary>
/// 卸载过程中锁定加载操作,防止新的任务请求!
/// </summary>
public bool LockLoadOperation { private set; get; }
public bool LockLoadOperation { set; get; }
public UnloadAllAssetsOptions(bool releaseAllHandles, bool lockLoadOperation)
{

View File

@@ -6,7 +6,7 @@ namespace YooAsset
/// <summary>
/// 循环迭代次数
/// </summary>
public int LoopCount { private set; get; }
public int LoopCount { set; get; }
public UnloadUnusedAssetsOptions(int loopCount)
{

View File

@@ -12,7 +12,7 @@ namespace YooAsset
/// <summary>
/// 当前激活的清单
/// </summary>
public PackageManifest ActiveManifest { set; get; }
public PackageManifest ActiveManifest { private set; get; }
public FileSystemHost(string packageName)
@@ -65,6 +65,44 @@ namespace YooAsset
FileSystems.Clear();
}
/// <summary>
/// 设置当前激活的资源清单
/// </summary>
public void SetActiveManifest(PackageManifest manifest)
{
ActiveManifest = manifest;
}
/// <summary>
/// 获取主文件系统
/// 说明:文件系统列表里,最后一个属于主文件系统
/// </summary>
public IFileSystem GetMainFileSystem()
{
int count = FileSystems.Count;
if (count == 0)
return null;
return FileSystems[count - 1];
}
/// <summary>
/// 获取资源包所属文件系统
/// </summary>
private IFileSystem GetBelongFileSystem(PackageBundle packageBundle)
{
for (int i = 0; i < FileSystems.Count; i++)
{
IFileSystem fileSystem = FileSystems[i];
if (fileSystem.Belong(packageBundle))
{
return fileSystem;
}
}
YooLogger.Error($"Can not found belong file system : {packageBundle.BundleName}");
return null;
}
#region
private BundleInfo CreateBundleInfo(PackageBundle packageBundle)
{
@@ -80,10 +118,6 @@ namespace YooAsset
throw new YooFileSystemException($"Can not found belong file system : {packageBundle.BundleName}");
}
/// <summary>
/// 获取主资源包信息
/// </summary>
public BundleInfo GetMainBundleInfo(AssetInfo assetInfo)
{
if (assetInfo == null || assetInfo.IsInvalid)
@@ -93,20 +127,12 @@ namespace YooAsset
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
return CreateBundleInfo(packageBundle);
}
/// <summary>
/// 获取主资源包名称
/// </summary>
public string GetMainBundleName(int bundleID)
{
// 注意:如果清单里未找到资源包会抛出异常!
var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
return packageBundle.BundleName;
}
/// <summary>
/// 获取依赖的资源包信息集合
/// </summary>
public List<BundleInfo> GetDependBundleInfos(AssetInfo assetInfo)
{
if (assetInfo == null || assetInfo.IsInvalid)
@@ -135,47 +161,88 @@ namespace YooAsset
#endregion
#region
public bool IsNeedDownloadFromRemoteInternal(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
{
YooLogger.Warning(assetInfo.Error);
return false;
}
BundleInfo bundleInfo = GetMainBundleInfo(assetInfo);
if (bundleInfo.IsNeedDownloadFromRemote())
return true;
List<BundleInfo> depends = GetDependBundleInfos(assetInfo);
foreach (var depend in depends)
{
if (depend.IsNeedDownloadFromRemote())
return true;
}
return false;
}
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
{
return CreateResourceDownloader(ActiveManifest, options);
}
public ResourceDownloaderOperation CreateResourceDownloader(PackageManifest manifest, ResourceDownloaderOptions options)
{
List<BundleInfo> downloadList;
if (options.Tags == null)
downloadList = GetDownloadListByAll(ActiveManifest);
downloadList = GetDownloadListByAll(manifest);
else
downloadList = GetDownloadListByTags(ActiveManifest, options.Tags);
downloadList = GetDownloadListByTags(manifest, options.Tags);
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
return operation;
}
public ResourceDownloaderOperation CreateResourceDownloader(BundleDownloaderOptions options)
{
return CreateResourceDownloader(ActiveManifest, options);
}
public ResourceDownloaderOperation CreateResourceDownloader(PackageManifest manifest, BundleDownloaderOptions options)
{
List<BundleInfo> downloadList;
if (options.AssetInfos == null)
downloadList = GetDownloadListByAll(ActiveManifest);
downloadList = GetDownloadListByAll(manifest);
else
downloadList = GetDownloadListByAssetInfos(ActiveManifest, options.AssetInfos, options.DownloadBundleDependencies);
downloadList = GetDownloadListByAssetInfos(manifest, options.AssetInfos, options.DownloadBundleDependencies);
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
return operation;
}
public ResourceUnpackerOperation CreateResourceUnpacker(ResourceUnpackerOptions options)
{
return CreateResourceUnpacker(ActiveManifest, options);
}
public ResourceUnpackerOperation CreateResourceUnpacker(PackageManifest manifest, ResourceUnpackerOptions options)
{
List<BundleInfo> unpcakList;
if (options.Tags == null)
unpcakList = GetUnpackListByAll(ActiveManifest);
unpcakList = GetUnpackListByAll(manifest);
else
unpcakList = GetUnpackListByTags(ActiveManifest, options.Tags);
unpcakList = GetUnpackListByTags(manifest, options.Tags);
var operation = new ResourceUnpackerOperation(PackageName, unpcakList, options.MaximumConcurrency, options.FailedTryAgain);
return operation;
}
public ResourceImporterOperation CreateResourceImporter(BundleImporterOptions options)
{
List<BundleInfo> importerList = GetImporterListByBundleInfos(ActiveManifest, options.BundleInfos);
return CreateResourceImporter(ActiveManifest, options);
}
public ResourceImporterOperation CreateResourceImporter(PackageManifest manifest, BundleImporterOptions options)
{
List<BundleInfo> importerList = GetImporterListByBundleInfos(manifest, options.BundleInfos);
var operation = new ResourceImporterOperation(PackageName, importerList, options.MaximumConcurrency, options.FailedTryAgain);
return operation;
}
internal List<BundleInfo> GetDownloadListByAll(PackageManifest manifest)
private List<BundleInfo> GetDownloadListByAll(PackageManifest manifest)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -195,7 +262,7 @@ namespace YooAsset
}
return result;
}
internal List<BundleInfo> GetDownloadListByTags(PackageManifest manifest, string[] tags)
private List<BundleInfo> GetDownloadListByTags(PackageManifest manifest, string[] tags)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -228,7 +295,7 @@ namespace YooAsset
}
return result;
}
internal List<BundleInfo> GetDownloadListByAssetInfos(PackageManifest manifest, AssetInfo[] assetInfos, bool recursiveDownload)
private List<BundleInfo> GetDownloadListByAssetInfos(PackageManifest manifest, AssetInfo[] assetInfos, bool recursiveDownload)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -303,7 +370,7 @@ namespace YooAsset
}
return result;
}
internal List<BundleInfo> GetUnpackListByAll(PackageManifest manifest)
private List<BundleInfo> GetUnpackListByAll(PackageManifest manifest)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -323,7 +390,7 @@ namespace YooAsset
}
return result;
}
internal List<BundleInfo> GetUnpackListByTags(PackageManifest manifest, string[] tags)
private List<BundleInfo> GetUnpackListByTags(PackageManifest manifest, string[] tags)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -346,7 +413,7 @@ namespace YooAsset
}
return result;
}
internal List<BundleInfo> GetImporterListByBundleInfos(PackageManifest manifest, ImportBundleInfo[] fileInfos)
private List<BundleInfo> GetImporterListByBundleInfos(PackageManifest manifest, ImportBundleInfo[] fileInfos)
{
if (manifest == null)
return new List<BundleInfo>();
@@ -401,35 +468,5 @@ namespace YooAsset
return result;
}
#endregion
/// <summary>
/// 获取主文件系统
/// 说明:文件系统列表里,最后一个属于主文件系统
/// </summary>
public IFileSystem GetMainFileSystem()
{
int count = FileSystems.Count;
if (count == 0)
return null;
return FileSystems[count - 1];
}
/// <summary>
/// 获取资源包所属文件系统
/// </summary>
public IFileSystem GetBelongFileSystem(PackageBundle packageBundle)
{
for (int i = 0; i < FileSystems.Count; i++)
{
IFileSystem fileSystem = FileSystems[i];
if (fileSystem.Belong(packageBundle))
{
return fileSystem;
}
}
YooLogger.Error($"Can not found belong file system : {packageBundle.BundleName}");
return null;
}
}
}

View File

@@ -6,12 +6,12 @@ namespace YooAsset
/// <summary>
/// 清理模式
/// </summary>
public string ClearMode { private set; get; }
public string ClearMode { set; get; }
/// <summary>
/// 附加参数
/// </summary>
public object ClearParam { private set; get; }
public object ClearParam { set; get; }
/// <summary>
/// 资源清单

View File

@@ -2,101 +2,153 @@
namespace YooAsset
{
/// <summary>
/// 下载器结束
/// 下载完成事件参数
/// </summary>
public struct DownloaderFinishData
public struct DownloadFinishedEventArgs
{
/// <summary>
/// 所属包裹名称
/// </summary>
public string PackageName;
public string PackageName { get; set; }
/// <summary>
/// 是否成功
/// </summary>
public bool Succeed;
public bool IsSuccess { get; set; }
/// <summary>
/// 如果下载失败,获取的错误信息。
/// </summary>
public string ErrorInfo { get; set; }
/// <summary>
/// 创建表示成功下载的事件参数
/// </summary>
internal static DownloadFinishedEventArgs CreateSuccess(string packageName)
{
var args = new DownloadFinishedEventArgs();
args.PackageName = packageName;
args.IsSuccess = true;
args.ErrorInfo = null;
return args;
}
/// <summary>
/// 创建表示失败下载的事件参数
/// </summary>
internal static DownloadFinishedEventArgs CreateFailure(string packageName, string errorInfo)
{
var args = new DownloadFinishedEventArgs();
args.PackageName = packageName;
args.IsSuccess = false;
args.ErrorInfo = errorInfo;
return args;
}
}
/// <summary>
/// 下载器相关的更新数据
/// 下载完成事件委托
/// </summary>
public struct DownloadUpdateData
public delegate void DownloadFinishedEventHandler(DownloadFinishedEventArgs args);
/// <summary>
/// 下载进度更新事件参数
/// </summary>
public struct DownloadProgressChangedEventArgs
{
/// <summary>
/// 所属包裹名称
/// </summary>
public string PackageName;
public string PackageName { get; set; }
/// <summary>
/// 下载进度 (0-1f)
/// </summary>
public float Progress;
public float Progress { get; set; }
/// <summary>
/// 下载文件总数
/// </summary>
public int TotalDownloadCount;
/// <summary>
/// 当前完成的下载文件数量
/// </summary>
public int CurrentDownloadCount;
public int TotalDownloadCount { get; set; }
/// <summary>
/// 下载数据总大小(单位:字节)
/// </summary>
public long TotalDownloadBytes;
public long TotalDownloadBytes { get; set; }
/// <summary>
/// 当前完成的下载文件数量
/// </summary>
public int CurrentDownloadCount { get; set; }
/// <summary>
/// 当前完成的下载数据大小(单位:字节)
/// </summary>
public long CurrentDownloadBytes;
public long CurrentDownloadBytes { get; set; }
}
/// <summary>
/// 下载器相关的错误数据
/// 下载进度更新事件委托
/// </summary>
public struct DownloadErrorData
public delegate void DownloadProgressChangedEventHandler(DownloadProgressChangedEventArgs args);
/// <summary>
/// 下载错误事件参数
/// </summary>
public struct DownloadErrorEventArgs
{
/// <summary>
/// 所属包裹名称
/// </summary>
public string PackageName;
public string PackageName { get; set; }
/// <summary>
/// 下载失败的文件名称
/// </summary>
public string FileName;
public string FileName { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string ErrorInfo;
public string ErrorInfo { get; set; }
}
/// <summary>
/// 下载器相关的文件数据
/// 下载错误事件委托
/// </summary>
public struct DownloadFileData
public delegate void DownloadErrorEventHandler(DownloadErrorEventArgs args);
/// <summary>
/// 开始下载单个文件事件参数
/// </summary>
public struct DownloadFileStartedEventArgs
{
/// <summary>
/// 所属包裹名称
/// </summary>
public string PackageName;
public string PackageName { get; set; }
/// <summary>
/// 资源包名称
/// </summary>
public string BundleName;
public string BundleName { get; set; }
/// <summary>
/// 文件名称
/// </summary>
public string FileName;
public string FileName { get; set; }
/// <summary>
/// 文件大小
/// </summary>
public long FileSize;
public long FileSize { get; set; }
}
/// <summary>
/// 开始下载单个文件事件委托
/// </summary>
public delegate void DownloadFileStartedEventHandler(DownloadFileStartedEventArgs args);
}

View File

@@ -15,29 +15,6 @@ namespace YooAsset
}
private const int MAX_LOADER_COUNT = 64;
#region
/// <summary>
/// 下载器结束
/// </summary>
public delegate void DownloaderFinish(DownloaderFinishData data);
/// <summary>
/// 下载进度更新
/// </summary>
public delegate void DownloadUpdate(DownloadUpdateData data);
/// <summary>
/// 下载发生错误
/// </summary>
public delegate void DownloadError(DownloadErrorData data);
/// <summary>
/// 开始下载某个文件
/// </summary>
public delegate void DownloadFileBegin(DownloadFileData data);
#endregion
private readonly string _packageName;
private readonly int _maximumConcurrency;
private readonly int _failedTryAgain;
@@ -82,24 +59,24 @@ namespace YooAsset
}
/// <summary>
/// 下载器结束(无论成功或失败)
/// 下载完成事件委托(无论成功或失败)
/// </summary>
public DownloaderFinish DownloadFinishCallback { set; get; }
public DownloadFinishedEventHandler DownloadFinishedHandler { set; get; }
/// <summary>
/// 下载进度发生变化
/// 下载进度更新事件委托
/// </summary>
public DownloadUpdate DownloadUpdateCallback { set; get; }
public DownloadProgressChangedEventHandler DownloadProgressChangedHandler { set; get; }
/// <summary>
/// 下载器发生错误
/// 下载错误事件委托
/// </summary>
public DownloadError DownloadErrorCallback { set; get; }
public DownloadErrorEventHandler DownloadErrorHandler { set; get; }
/// <summary>
/// 开始下载个文件
/// 开始下载个文件事件委托
/// </summary>
public DownloadFileBegin DownloadFileBeginCallback { set; get; }
public DownloadFileStartedEventHandler DownloadFileStartedHandler { set; get; }
internal DownloaderOperation(string packageName, List<BundleInfo> downloadList, int maximumConcurrency, int failedTryAgain)
@@ -130,12 +107,10 @@ namespace YooAsset
Status = EOperationStatus.Failed;
Error = "Download bundle list is null.";
if (DownloadFinishCallback != null)
if (DownloadFinishedHandler != null)
{
var data = new DownloaderFinishData();
data.PackageName = _packageName;
data.Succeed = false;
DownloadFinishCallback.Invoke(data);
var args = DownloadFinishedEventArgs.CreateFailure(_packageName, Error);
DownloadFinishedHandler.Invoke(args);
}
}
else if (_bundleInfoList.Count == 0)
@@ -144,12 +119,10 @@ namespace YooAsset
Status = EOperationStatus.Succeed;
Progress = 1f;
if (DownloadFinishCallback != null)
if (DownloadFinishedHandler != null)
{
var data = new DownloaderFinishData();
data.PackageName = _packageName;
data.Succeed = true;
DownloadFinishCallback.Invoke(data);
var args = DownloadFinishedEventArgs.CreateSuccess(_packageName);
DownloadFinishedHandler.Invoke(args);
}
}
else
@@ -200,16 +173,16 @@ namespace YooAsset
else
Progress = (float)_lastDownloadBytes / TotalDownloadBytes;
if (DownloadUpdateCallback != null)
if (DownloadProgressChangedHandler != null)
{
var data = new DownloadUpdateData();
var data = new DownloadProgressChangedEventArgs();
data.PackageName = _packageName;
data.Progress = Progress;
data.TotalDownloadCount = TotalDownloadCount;
data.CurrentDownloadCount = _lastDownloadCount;
data.TotalDownloadBytes = TotalDownloadBytes;
data.CurrentDownloadCount = _lastDownloadCount;
data.CurrentDownloadBytes = _lastDownloadBytes;
DownloadUpdateCallback.Invoke(data);
DownloadProgressChangedHandler.Invoke(data);
}
}
@@ -231,14 +204,14 @@ namespace YooAsset
_downloaders.Add(downloader);
_bundleInfoList.RemoveAt(index);
if (DownloadFileBeginCallback != null)
if (DownloadFileStartedHandler != null)
{
var data = new DownloadFileData();
var data = new DownloadFileStartedEventArgs();
data.PackageName = _packageName;
data.BundleName = bundleInfo.Bundle.BundleName;
data.FileName = bundleInfo.Bundle.FileName;
data.FileSize = bundleInfo.Bundle.FileSize;
DownloadFileBeginCallback.Invoke(data);
DownloadFileStartedHandler.Invoke(data);
}
}
}
@@ -260,21 +233,19 @@ namespace YooAsset
Status = EOperationStatus.Failed;
Error = $"Failed to download file : {bundleName}";
if (DownloadErrorCallback != null)
if (DownloadErrorHandler != null)
{
var data = new DownloadErrorData();
var data = new DownloadErrorEventArgs();
data.PackageName = _packageName;
data.FileName = bundleName;
data.ErrorInfo = failedDownloader.Error;
DownloadErrorCallback.Invoke(data);
DownloadErrorHandler.Invoke(data);
}
if (DownloadFinishCallback != null)
if (DownloadFinishedHandler != null)
{
var data = new DownloaderFinishData();
data.PackageName = _packageName;
data.Succeed = false;
DownloadFinishCallback.Invoke(data);
var args = DownloadFinishedEventArgs.CreateFailure(_packageName, failedDownloader.Error);
DownloadFinishedHandler.Invoke(args);
}
}
else
@@ -283,12 +254,10 @@ namespace YooAsset
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
if (DownloadFinishCallback != null)
if (DownloadFinishedHandler != null)
{
var data = new DownloaderFinishData();
data.PackageName = _packageName;
data.Succeed = true;
DownloadFinishCallback.Invoke(data);
var args = DownloadFinishedEventArgs.CreateSuccess(_packageName);
DownloadFinishedHandler.Invoke(args);
}
}
}
@@ -409,10 +378,10 @@ namespace YooAsset
/// <summary>
/// 创建空的下载器
/// </summary>
internal static ResourceDownloaderOperation CreateEmptyDownloader(string packageName, int maximumConcurrency, int failedTryAgain)
internal static ResourceDownloaderOperation CreateEmptyDownloader(string packageName)
{
List<BundleInfo> downloadList = new List<BundleInfo>();
var operation = new ResourceDownloaderOperation(packageName, downloadList, maximumConcurrency, failedTryAgain);
var operation = new ResourceDownloaderOperation(packageName, downloadList, 1, 1);
return operation;
}
}
@@ -426,10 +395,10 @@ namespace YooAsset
/// <summary>
/// 创建空的解压器
/// </summary>
internal static ResourceUnpackerOperation CreateEmptyUnpacker(string packageName, int upackingMaxNumber, int failedTryAgain)
internal static ResourceUnpackerOperation CreateEmptyUnpacker(string packageName)
{
List<BundleInfo> downloadList = new List<BundleInfo>();
var operation = new ResourceUnpackerOperation(packageName, downloadList, upackingMaxNumber, failedTryAgain);
var operation = new ResourceUnpackerOperation(packageName, downloadList, 1, 1);
return operation;
}
}
@@ -443,10 +412,10 @@ namespace YooAsset
/// <summary>
/// 创建空的导入器
/// </summary>
internal static ResourceImporterOperation CreateEmptyImporter(string packageName, int upackingMaxNumber, int failedTryAgain)
internal static ResourceImporterOperation CreateEmptyImporter(string packageName)
{
List<BundleInfo> downloadList = new List<BundleInfo>();
var operation = new ResourceImporterOperation(packageName, downloadList, upackingMaxNumber, failedTryAgain);
var operation = new ResourceImporterOperation(packageName, downloadList, 1, 1);
return operation;
}
}

View File

@@ -9,23 +9,23 @@ namespace YooAsset
/// <summary>
/// 最大并发数量
/// </summary>
public int MaximumConcurrency { private set; get; }
public int MaximumConcurrency { set; get; }
/// <summary>
/// 失败后的重试次数
/// </summary>
public int FailedTryAgain { private set; get; }
public int FailedTryAgain { set; get; }
/// <summary>
/// 下载资源对象所属资源包内所有资源对象依赖的资源包
/// </summary>
public bool DownloadBundleDependencies { private set; get; }
public bool DownloadBundleDependencies { set; get; }
/// <summary>
/// 资源信息列表
/// 说明如果列表为NULL则下载所有资产
/// </summary>
public AssetInfo[] AssetInfos { private set; get; }
public AssetInfo[] AssetInfos { set; get; }
public BundleDownloaderOptions(AssetInfo assetInfo, bool downloadDependencies, int maximumConcurrency, int failedTryAgain)
{
@@ -51,18 +51,18 @@ namespace YooAsset
/// <summary>
/// 最大并发数量
/// </summary>
public int MaximumConcurrency { private set; get; }
public int MaximumConcurrency { set; get; }
/// <summary>
/// 失败后的重试次数
/// </summary>
public int FailedTryAgain { private set; get; }
public int FailedTryAgain { set; get; }
/// <summary>
/// 资源标签列表
/// 说明如果列表为NULL则下载所有资产
/// </summary>
public string[] Tags { private set; get; }
public string[] Tags { set; get; }
public ResourceDownloaderOptions(int maximumConcurrency, int failedTryAgain)
{
@@ -92,18 +92,18 @@ namespace YooAsset
/// <summary>
/// 最大并发数量
/// </summary>
public int MaximumConcurrency { private set; get; }
public int MaximumConcurrency { set; get; }
/// <summary>
/// 失败后的重试次数
/// </summary>
public int FailedTryAgain { private set; get; }
public int FailedTryAgain { set; get; }
/// <summary>
/// 资源标签列表
/// 说明如果列表为NULL则解压所有资产
/// </summary>
public string[] Tags { private set; get; }
public string[] Tags { set; get; }
public ResourceUnpackerOptions(int maximumConcurrency, int failedTryAgain)
{
@@ -133,17 +133,17 @@ namespace YooAsset
/// <summary>
/// 最大并发数量
/// </summary>
public int MaximumConcurrency { private set; get; }
public int MaximumConcurrency { set; get; }
/// <summary>
/// 失败后的重试次数
/// </summary>
public int FailedTryAgain { private set; get; }
public int FailedTryAgain { set; get; }
/// <summary>
/// 资源包信息列表
/// </summary>
public ImportBundleInfo[] BundleInfos { private set; get; }
public ImportBundleInfo[] BundleInfos { set; get; }
public BundleImporterOptions(ImportBundleInfo[] bundleInfos, int maximumConcurrency, int failedTryAgain)
{

View File

@@ -76,7 +76,7 @@ namespace YooAsset
if (_loadPackageManifestOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.Done;
_host.ActiveManifest = _loadPackageManifestOp.Manifest;
_host.SetActiveManifest(_loadPackageManifestOp.Manifest);
Status = EOperationStatus.Succeed;
}
else

View File

@@ -6,12 +6,12 @@ namespace YooAsset
/// <summary>
/// 包裹版本
/// </summary>
public string PackageVersion { private set; get; }
public string PackageVersion { set; get; }
/// <summary>
/// 超时时间
/// </summary>
public int Timeout { private set; get; }
public int Timeout { set; get; }
public LoadPackageManifestOptions(string packageVersion, int timeout)
{

View File

@@ -17,7 +17,6 @@ namespace YooAsset
private readonly FileSystemHost _host;
private readonly PreDownloadContentOptions _options;
private readonly int _timeout;
private FSLoadPackageManifestOperation _loadPackageManifestOp;
private PackageManifest _manifest;
private ESteps _steps = ESteps.None;
@@ -96,109 +95,32 @@ namespace YooAsset
}
}
/// <summary>
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件
/// </summary>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
public ResourceDownloaderOperation CreateResourceDownloader(int downloadingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Warning($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName, downloadingMaxNumber, failedTryAgain);
}
List<BundleInfo> downloadList = _host.GetDownloadListByAll(_manifest);
var operation = new ResourceDownloaderOperation(_host.PackageName, downloadList, downloadingMaxNumber, failedTryAgain);
return operation;
}
/// <summary>
/// 创建资源下载器,用于下载指定的资源标签关联的资源包文件
/// </summary>
/// <param name="tag">资源标签</param>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
public ResourceDownloaderOperation CreateResourceDownloader(string tag, int downloadingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Warning($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName, downloadingMaxNumber, failedTryAgain);
}
List<BundleInfo> downloadList = _host.GetDownloadListByTags(_manifest, new string[] { tag });
var operation = new ResourceDownloaderOperation(_host.PackageName, downloadList, downloadingMaxNumber, failedTryAgain);
return operation;
}
/// <summary>
/// 创建资源下载器,用于下载指定的资源标签列表关联的资源包文件
/// </summary>
/// <param name="tags">资源标签列表</param>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
public ResourceDownloaderOperation CreateResourceDownloader(string[] tags, int downloadingMaxNumber, int failedTryAgain)
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Warning($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName, downloadingMaxNumber, failedTryAgain);
YooLogger.Error($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName);
}
List<BundleInfo> downloadList = _host.GetDownloadListByTags(_manifest, tags);
var operation = new ResourceDownloaderOperation(_host.PackageName, downloadList, downloadingMaxNumber, failedTryAgain);
return operation;
return _host.CreateResourceDownloader(_manifest, options);
}
/// <summary>
/// 创建资源下载器,用于下载指定的资源依赖的资源包文件
/// 创建资源下载器,用于下载指定的资源信息列表依赖的资源包文件
/// </summary>
/// <param name="location">资源定位地址</param>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
public ResourceDownloaderOperation CreateBundleDownloader(string location, bool recursiveDownload, int downloadingMaxNumber, int failedTryAgain)
public ResourceDownloaderOperation CreateBundleDownloader(BundleDownloaderOptions options)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Warning($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName, downloadingMaxNumber, failedTryAgain);
YooLogger.Error($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName);
}
List<AssetInfo> assetInfos = new List<AssetInfo>();
var assetInfo = _manifest.ConvertLocationToAssetInfo(location, null);
assetInfos.Add(assetInfo);
List<BundleInfo> downloadList = _host.GetDownloadListByAssetInfos(_manifest, assetInfos.ToArray(), recursiveDownload);
var operation = new ResourceDownloaderOperation(_host.PackageName, downloadList, downloadingMaxNumber, failedTryAgain);
return operation;
}
/// <summary>
/// 创建资源下载器,用于下载指定的资源列表依赖的资源包文件
/// </summary>
/// <param name="locations">资源定位地址列表</param>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
public ResourceDownloaderOperation CreateBundleDownloader(string[] locations, bool recursiveDownload, int downloadingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Warning($"{nameof(PreDownloadContentOperation)} status is not succeed !");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName, downloadingMaxNumber, failedTryAgain);
}
List<AssetInfo> assetInfos = new List<AssetInfo>(locations.Length);
foreach (var location in locations)
{
var assetInfo = _manifest.ConvertLocationToAssetInfo(location, null);
assetInfos.Add(assetInfo);
}
List<BundleInfo> downloadList = _host.GetDownloadListByAssetInfos(_manifest, assetInfos.ToArray(), recursiveDownload);
var operation = new ResourceDownloaderOperation(_host.PackageName, downloadList, downloadingMaxNumber, failedTryAgain);
return operation;
return _host.CreateResourceDownloader(_manifest, options);
}
}
}

View File

@@ -6,12 +6,12 @@ namespace YooAsset
/// <summary>
/// 预下载的包裹版本
/// </summary>
public string PackageVersion { private set; get; }
public string PackageVersion { set; get; }
/// <summary>
/// 资源清单请求超时时间
/// </summary>
public int Timeout { private set; get; }
public int Timeout { set; get; }
public PreDownloadContentOptions(string packageVersion, int timeout)
{

View File

@@ -6,12 +6,12 @@ namespace YooAsset
/// <summary>
/// 在URL末尾添加时间戳
/// </summary>
public bool AppendTimeTicks { private set; get; }
public bool AppendTimeTicks { set; get; }
/// <summary>
/// 超时时间
/// </summary>
public int Timeout { private set; get; }
public int Timeout { set; get; }
public RequestPackageVersionOptions(bool appendTimeTicks, int timeout)
{

View File

@@ -285,7 +285,7 @@ namespace YooAsset
{
DebugCheckInitialize();
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
return IsNeedDownloadFromRemoteInternal(assetInfo);
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
}
/// <summary>
@@ -295,7 +295,7 @@ namespace YooAsset
public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
{
DebugCheckInitialize();
return IsNeedDownloadFromRemoteInternal(assetInfo);
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
}
/// <summary>
@@ -380,28 +380,6 @@ namespace YooAsset
string assetPath = _fileSystemHost.ActiveManifest.TryMappingToAssetPath(location);
return string.IsNullOrEmpty(assetPath) == false;
}
private bool IsNeedDownloadFromRemoteInternal(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
{
YooLogger.Warning(assetInfo.Error);
return false;
}
BundleInfo bundleInfo = _fileSystemHost.GetMainBundleInfo(assetInfo);
if (bundleInfo.IsNeedDownloadFromRemote())
return true;
List<BundleInfo> depends = _fileSystemHost.GetDependBundleInfos(assetInfo);
foreach (var depend in depends)
{
if (depend.IsNeedDownloadFromRemote())
return true;
}
return false;
}
#endregion
#region
@@ -866,11 +844,11 @@ namespace YooAsset
DebugCheckInitialize();
return _fileSystemHost.CreateResourceDownloader(options);
}
/// <summary>
/// 创建资源下载器,用于下载指定的资源信息列表依赖的资源包文件
/// </summary>
public ResourceDownloaderOperation CreateBundleDownloader(BundleDownloaderOptions options)
public ResourceDownloaderOperation CreateResourceDownloader(BundleDownloaderOptions options)
{
DebugCheckInitialize();
return _fileSystemHost.CreateResourceDownloader(options);

View File

@@ -233,15 +233,6 @@ namespace YooAsset
}
#region
/// <summary>
/// 设置下载系统参数,自定义下载请求
/// </summary>
[Obsolete("This method is deprecated. Please use FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR instead.", true)]
public static void SetDownloadSystemUnityWebRequest(UnityWebRequestCreator createDelegate)
{
throw new NotImplementedException();
}
/// <summary>
/// 设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)
/// </summary>

View File

@@ -337,7 +337,7 @@ public static class CompatibleResourcePackage
{
var assetInfo = package.ConvertLocationToAssetInfo(location, null);
var options = new BundleDownloaderOptions(assetInfo, recursiveDownload, downloadingMaxNumber, failedTryAgain);
return package.CreateBundleDownloader(options);
return package.CreateResourceDownloader(options);
}
public static ResourceDownloaderOperation CreateBundleDownloader(this ResourcePackage package, string location, int downloadingMaxNumber, int failedTryAgain)
{
@@ -357,7 +357,7 @@ public static class CompatibleResourcePackage
}
var options = new BundleDownloaderOptions(assetInfos.ToArray(), recursiveDownload, downloadingMaxNumber, failedTryAgain);
return package.CreateBundleDownloader(options);
return package.CreateResourceDownloader(options);
}
public static ResourceDownloaderOperation CreateBundleDownloader(this ResourcePackage package, string[] locations, int downloadingMaxNumber, int failedTryAgain)
{
@@ -371,7 +371,7 @@ public static class CompatibleResourcePackage
{
AssetInfo[] assetInfos = new AssetInfo[] { assetInfo };
var options = new BundleDownloaderOptions(assetInfos, recursiveDownload, downloadingMaxNumber, failedTryAgain);
return package.CreateBundleDownloader(options);
return package.CreateResourceDownloader(options);
}
public static ResourceDownloaderOperation CreateBundleDownloader(this ResourcePackage package, AssetInfo assetInfo, int downloadingMaxNumber, int failedTryAgain)
{
@@ -384,7 +384,7 @@ public static class CompatibleResourcePackage
public static ResourceDownloaderOperation CreateBundleDownloader(this ResourcePackage package, AssetInfo[] assetInfos, bool recursiveDownload, int downloadingMaxNumber, int failedTryAgain)
{
var options = new BundleDownloaderOptions(assetInfos, recursiveDownload, downloadingMaxNumber, failedTryAgain);
return package.CreateBundleDownloader(options);
return package.CreateResourceDownloader(options);
}
public static ResourceDownloaderOperation CreateBundleDownloader(this ResourcePackage package, AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain)
{

View File

@@ -57,7 +57,7 @@ public class PatchEventDefine
public long TotalDownloadSizeBytes;
public long CurrentDownloadSizeBytes;
public static void SendEventMessage(DownloadUpdateData updateData)
public static void SendEventMessage(DownloadProgressChangedEventArgs updateData)
{
var msg = new DownloadUpdate();
msg.TotalDownloadCount = updateData.TotalDownloadCount;
@@ -100,7 +100,7 @@ public class PatchEventDefine
public string FileName;
public string Error;
public static void SendEventMessage(DownloadErrorData errorData)
public static void SendEventMessage(DownloadErrorEventArgs errorData)
{
var msg = new WebFileDownloadFailed();
msg.FileName = errorData.FileName;

View File

@@ -26,8 +26,8 @@ public class FsmDownloadPackageFiles : IStateNode
private IEnumerator BeginDownload()
{
var downloader = (ResourceDownloaderOperation)_machine.GetBlackboardValue("Downloader");
downloader.DownloadErrorCallback = PatchEventDefine.WebFileDownloadFailed.SendEventMessage;
downloader.DownloadUpdateCallback = PatchEventDefine.DownloadUpdate.SendEventMessage;
downloader.DownloadErrorHandler = PatchEventDefine.WebFileDownloadFailed.SendEventMessage;
downloader.DownloadProgressChangedHandler = PatchEventDefine.DownloadUpdate.SendEventMessage;
downloader.BeginDownload();
yield return downloader;