mirror of https://github.com/tuyoogame/YooAsset
parent
9737cd06dd
commit
f2e6da649b
|
@ -0,0 +1,97 @@
|
||||||
|
|
||||||
|
namespace YooAsset
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 下载器结束
|
||||||
|
/// </summary>
|
||||||
|
public struct DownloaderFinishData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 所属包裹名称
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否成功
|
||||||
|
/// </summary>
|
||||||
|
public bool Succeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载器相关的更新数据
|
||||||
|
/// </summary>
|
||||||
|
public struct DownloadUpdateData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 所属包裹名称
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载进度 (0-1f)
|
||||||
|
/// </summary>
|
||||||
|
public float Progress;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载文件总数
|
||||||
|
/// </summary>
|
||||||
|
public int TotalDownloadCount;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当前完成的下载文件数量
|
||||||
|
/// </summary>
|
||||||
|
public int CurrentDownloadCount;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载数据总大小(单位:字节)
|
||||||
|
/// </summary>
|
||||||
|
public long TotalDownloadBytes;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当前完成的下载数据大小(单位:字节)
|
||||||
|
/// </summary>
|
||||||
|
public long CurrentDownloadBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载器相关的错误数据
|
||||||
|
/// </summary>
|
||||||
|
public struct DownloadErrorData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 所属包裹名称
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载失败的文件名称
|
||||||
|
/// </summary>
|
||||||
|
public string FileName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 错误信息
|
||||||
|
/// </summary>
|
||||||
|
public string ErrorInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载器相关的文件数据
|
||||||
|
/// </summary>
|
||||||
|
public struct DownloadFileData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 所属包裹名称
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载的文件名称
|
||||||
|
/// </summary>
|
||||||
|
public string FileName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下载的文件大小
|
||||||
|
/// </summary>
|
||||||
|
public long FileSize;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6602c4be2ef295546b7bbb328de8fb0c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -15,10 +15,27 @@ namespace YooAsset
|
||||||
|
|
||||||
private const int MAX_LOADER_COUNT = 64;
|
private const int MAX_LOADER_COUNT = 64;
|
||||||
|
|
||||||
public delegate void OnDownloadOver(bool isSucceed);
|
#region 委托定义
|
||||||
public delegate void OnDownloadProgress(int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes);
|
/// <summary>
|
||||||
public delegate void OnDownloadError(string fileName, string error);
|
/// 下载器结束
|
||||||
public delegate void OnStartDownloadFile(string fileName, long sizeBytes);
|
/// </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 string _packageName;
|
||||||
private readonly int _downloadingMaxNumber;
|
private readonly int _downloadingMaxNumber;
|
||||||
|
@ -67,23 +84,23 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当下载器结束(无论成功或失败)
|
/// 当下载器结束(无论成功或失败)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OnDownloadOver OnDownloadOverCallback { set; get; }
|
public DownloaderFinish DownloadFinishCallback { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当下载进度发生变化
|
/// 当下载进度发生变化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OnDownloadProgress OnDownloadProgressCallback { set; get; }
|
public DownloadUpdate DownloadUpdateCallback { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当某个文件下载失败
|
/// 当下载器发生错误
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OnDownloadError OnDownloadErrorCallback { set; get; }
|
public DownloadError DownloadErrorCallback { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当开始下载某个文件
|
/// 当开始下载某个文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OnStartDownloadFile OnStartDownloadFileCallback { set; get; }
|
public DownloadFileBegin DownloadFileBeginCallback { set; get; }
|
||||||
|
|
||||||
|
|
||||||
internal DownloaderOperation(string packageName, List<BundleInfo> downloadList, int downloadingMaxNumber, int failedTryAgain, int timeout)
|
internal DownloaderOperation(string packageName, List<BundleInfo> downloadList, int downloadingMaxNumber, int failedTryAgain, int timeout)
|
||||||
{
|
{
|
||||||
|
@ -160,7 +177,18 @@ namespace YooAsset
|
||||||
_lastDownloadBytes = downloadBytes;
|
_lastDownloadBytes = downloadBytes;
|
||||||
_lastDownloadCount = _cachedDownloadCount;
|
_lastDownloadCount = _cachedDownloadCount;
|
||||||
Progress = (float)_lastDownloadBytes / TotalDownloadBytes;
|
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);
|
var downloader = bundleInfo.CreateDownloader(_failedTryAgain, _timeout);
|
||||||
_downloaders.Add(downloader);
|
_downloaders.Add(downloader);
|
||||||
_bundleInfoList.RemoveAt(index);
|
_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;
|
_steps = ESteps.Done;
|
||||||
Status = EOperationStatus.Failed;
|
Status = EOperationStatus.Failed;
|
||||||
Error = $"Failed to download file : {bundleName}";
|
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
|
else
|
||||||
{
|
{
|
||||||
// 结算成功
|
// 结算成功
|
||||||
_steps = ESteps.Done;
|
_steps = ESteps.Done;
|
||||||
Status = EOperationStatus.Succeed;
|
Status = EOperationStatus.Succeed;
|
||||||
OnDownloadOverCallback?.Invoke(true);
|
|
||||||
|
if (DownloadFinishCallback != null)
|
||||||
|
{
|
||||||
|
var data = new DownloaderFinishData();
|
||||||
|
data.PackageName = _packageName;
|
||||||
|
data.Succeed = true;
|
||||||
|
DownloadFinishCallback.Invoke(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue