update runtime code

pull/62/head
hevinci 2022-12-20 16:17:01 +08:00
parent 5c16171781
commit 4e759134bd
28 changed files with 302 additions and 487 deletions

View File

@ -211,29 +211,29 @@ namespace YooAsset
/// <param name="packageVersion">更新的包裹版本</param> /// <param name="packageVersion">更新的包裹版本</param>
/// <param name="autoActiveManifest">自动激活清单</param> /// <param name="autoActiveManifest">自动激活清单</param>
/// <param name="timeout">超时时间默认值60秒</param> /// <param name="timeout">超时时间默认值60秒</param>
public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifest = true, bool autoActiveManifest = true, int timeout = 60) public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifestFile = true, int timeout = 60)
{ {
DebugCheckInitialize(); DebugCheckInitialize();
DebugCheckUpdateManifest(); DebugCheckUpdateManifest();
return _playModeServices.UpdatePackageManifestAsync(packageVersion, autoSaveManifest, autoActiveManifest, timeout); return _playModeServices.UpdatePackageManifestAsync(packageVersion, autoSaveManifestFile, timeout);
} }
/// <summary> /// <summary>
/// 检查本地包裹内容的完整性 /// 检查包裹内容的完整性
/// </summary> /// </summary>
public CheckPackageContentsOperation CheckPackageContentsAsync() public CheckContentsIntegrityOperation CheckContentsIntegrityAsync()
{ {
DebugCheckInitialize(); DebugCheckInitialize();
return _playModeServices.CheckPackageContentsAsync(); return _playModeServices.CheckContentsIntegrityAsync();
} }
/// <summary> /// <summary>
/// 清理本地包裹未使用的缓存文件 /// 清理包裹未使用的缓存文件
/// </summary> /// </summary>
public ClearPackageUnusedCacheFilesOperation ClearPackageUnusedCacheFilesAsync() public ClearUnusedCacheFilesOperation ClearUnusedCacheFilesAsync()
{ {
DebugCheckInitialize(); DebugCheckInitialize();
var operation = new ClearPackageUnusedCacheFilesOperation(this); var operation = new ClearUnusedCacheFilesOperation(this);
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }

View File

@ -0,0 +1,123 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace YooAsset
{
/// <summary>
/// 检查包裹内容的完整性
/// </summary>
public abstract class CheckContentsIntegrityOperation : AsyncOperationBase
{
}
internal sealed class EditorSimulateModeCheckContentsIntegrityOperation : CheckContentsIntegrityOperation
{
internal EditorSimulateModeCheckContentsIntegrityOperation()
{
}
internal override void Start()
{
Status = EOperationStatus.Succeed;
}
internal override void Update()
{
}
}
internal sealed class OfflinePlayModeCheckContentsIntegrityOperation : CheckContentsIntegrityOperation
{
internal OfflinePlayModeCheckContentsIntegrityOperation()
{
}
internal override void Start()
{
Status = EOperationStatus.Succeed;
}
internal override void Update()
{
}
}
internal sealed class HostPlayModeCheckContentsIntegrityOperation : CheckContentsIntegrityOperation
{
private enum ESteps
{
None,
CheckLoadedManifest,
StartVerifyOperation,
CheckVerifyOperation,
Done,
}
private readonly HostPlayModeImpl _impl;
private readonly string _packageName;
private VerifyCacheFilesOperation _verifyOperation;
private ESteps _steps = ESteps.None;
internal HostPlayModeCheckContentsIntegrityOperation(HostPlayModeImpl impl, string packageName)
{
_impl = impl;
_packageName = packageName;
}
internal override void Start()
{
_steps = ESteps.CheckLoadedManifest;
}
internal override void Update()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
if (_steps == ESteps.CheckLoadedManifest)
{
if (_impl.ActivePatchManifest == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"Not found loaded package : {_packageName}";
}
else
{
_steps = ESteps.StartVerifyOperation;
}
}
if (_steps == ESteps.StartVerifyOperation)
{
_verifyOperation = VerifyCacheFilesOperation.CreateOperation(_impl.ActivePatchManifest, _impl);
OperationSystem.StartOperation(_verifyOperation);
_steps = ESteps.CheckVerifyOperation;
}
if (_steps == ESteps.CheckVerifyOperation)
{
Progress = _verifyOperation.Progress;
if (_verifyOperation.IsDone == false)
return;
bool verifySucceed = true;
foreach (var verifyInfo in _verifyOperation.VerifyFailList)
{
// 注意:跳过内置资源文件
if (verifyInfo.IsBuildinFile)
continue;
verifySucceed = false;
YooLogger.Warning($"Failed verify file : {verifyInfo.VerifyFilePath}");
}
if (verifySucceed)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"The package resource {_packageName} content has verify failed file !";
}
}
}
}
}

View File

@ -1,133 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace YooAsset
{
/// <summary>
/// 检查本地包裹内容的完整性
/// </summary>
public abstract class CheckPackageContentsOperation : AsyncOperationBase
{
}
internal sealed class EditorSimulateModeCheckPackageContentsOperation : CheckPackageContentsOperation
{
internal EditorSimulateModeCheckPackageContentsOperation()
{
}
internal override void Start()
{
Status = EOperationStatus.Succeed;
}
internal override void Update()
{
}
}
internal sealed class OfflinePlayModeCheckPackageContentsOperation : CheckPackageContentsOperation
{
internal OfflinePlayModeCheckPackageContentsOperation()
{
}
internal override void Start()
{
Status = EOperationStatus.Succeed;
}
internal override void Update()
{
}
}
internal sealed class HostPlayModeCheckPackageContentsOperation : CheckPackageContentsOperation
{
private enum ESteps
{
None,
CheckLoadedManifest,
StartVerifyOperation,
CheckVerifyOperation,
Done,
}
private readonly HostPlayModeImpl _impl;
private readonly string _packageName;
private CacheFilesVerifyOperation _verifyOperation;
private ESteps _steps = ESteps.None;
private float _verifyTime;
internal HostPlayModeCheckPackageContentsOperation(HostPlayModeImpl impl, string packageName)
{
_impl = impl;
_packageName = packageName;
}
internal override void Start()
{
_steps = ESteps.CheckLoadedManifest;
}
internal override void Update()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
if (_steps == ESteps.CheckLoadedManifest)
{
if (_impl.ActivePatchManifest == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"Not found loaded package : {_packageName}";
}
else
{
_steps = ESteps.StartVerifyOperation;
}
}
if (_steps == ESteps.StartVerifyOperation)
{
#if UNITY_WEBGL
_verifyOperation = new CacheFilesVerifyWithoutThreadOperation(_impl.ActivePatchManifest, _impl);
#else
_verifyOperation = new CacheFilesVerifyWithThreadOperation(_impl.ActivePatchManifest, _impl);
#endif
OperationSystem.StartOperation(_verifyOperation);
_verifyTime = UnityEngine.Time.realtimeSinceStartup;
_steps = ESteps.CheckVerifyOperation;
}
if (_steps == ESteps.CheckVerifyOperation)
{
Progress = _verifyOperation.Progress;
if (_verifyOperation.IsDone)
{
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyTime;
YooLogger.Log($"Verify result : Success {_verifyOperation.VerifySuccessList.Count}, Fail {_verifyOperation.VerifyFailList.Count}, Elapsed time {costTime} seconds");
bool verifySucceed = true;
foreach (var verifyInfo in _verifyOperation.VerifyFailList)
{
// 注意:跳过内置资源文件
if (verifyInfo.IsBuildinFile)
continue;
verifySucceed = false;
YooLogger.Warning($"Failed verify file : {verifyInfo.VerifyFilePath}");
}
if (verifySucceed)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"The package resource {_packageName} content has verify failed file !";
}
}
}
}
}
}

View File

@ -7,7 +7,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 清理本地包裹未使用的缓存文件 /// 清理本地包裹未使用的缓存文件
/// </summary> /// </summary>
public sealed class ClearPackageUnusedCacheFilesOperation : AsyncOperationBase public sealed class ClearUnusedCacheFilesOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@ -18,11 +18,11 @@ namespace YooAsset
} }
private readonly AssetsPackage _package; private readonly AssetsPackage _package;
private ESteps _steps = ESteps.None;
private List<string> _unusedCacheFilePaths; private List<string> _unusedCacheFilePaths;
private int _unusedFileTotalCount = 0; private int _unusedFileTotalCount = 0;
private ESteps _steps = ESteps.None;
internal ClearPackageUnusedCacheFilesOperation(AssetsPackage package) internal ClearUnusedCacheFilesOperation(AssetsPackage package)
{ {
_package = package; _package = package;
} }

View File

@ -29,10 +29,10 @@ namespace YooAsset
private readonly List<DownloaderBase> _failedList = new List<DownloaderBase>(MAX_LOADER_COUNT); private readonly List<DownloaderBase> _failedList = new List<DownloaderBase>(MAX_LOADER_COUNT);
// 数据相关 // 数据相关
private ESteps _steps = ESteps.None;
private bool _isPause = false; private bool _isPause = false;
private long _lastDownloadBytes = 0; private long _lastDownloadBytes = 0;
private int _lastDownloadCount = 0; private int _lastDownloadCount = 0;
private ESteps _steps = ESteps.None;
/// <summary> /// <summary>

View File

@ -101,17 +101,15 @@ namespace YooAsset
private readonly OfflinePlayModeImpl _impl; private readonly OfflinePlayModeImpl _impl;
private readonly string _packageName; private readonly string _packageName;
private BuildinPackageVersionQueryOperation _buildinPackageVersionQuery; private QueryBuildinPackageVersionOperation _buildinPackageVersionQuery;
private BuildinManifestLoadOperation _buildinManifestLoad; private LoadBuildinManifestOperation _buildinManifestLoad;
private CacheFilesVerifyOperation _verifyOperation; private VerifyCacheFilesOperation _verifyOperation;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private float _verifyTime;
internal OfflinePlayModeInitializationOperation(OfflinePlayModeImpl impl, string packageName) internal OfflinePlayModeInitializationOperation(OfflinePlayModeImpl impl, string packageName)
{ {
_impl = impl; _impl = impl;
_packageName = packageName; _packageName = packageName;
} }
internal override void Start() internal override void Start()
{ {
@ -126,7 +124,7 @@ namespace YooAsset
{ {
if (_buildinPackageVersionQuery == null) if (_buildinPackageVersionQuery == null)
{ {
_buildinPackageVersionQuery = new BuildinPackageVersionQueryOperation(_packageName); _buildinPackageVersionQuery = new QueryBuildinPackageVersionOperation(_packageName);
OperationSystem.StartOperation(_buildinPackageVersionQuery); OperationSystem.StartOperation(_buildinPackageVersionQuery);
} }
@ -149,7 +147,7 @@ namespace YooAsset
{ {
if (_buildinManifestLoad == null) if (_buildinManifestLoad == null)
{ {
_buildinManifestLoad = new BuildinManifestLoadOperation(_packageName, _buildinPackageVersionQuery.Version); _buildinManifestLoad = new LoadBuildinManifestOperation(_packageName, _buildinPackageVersionQuery.Version);
OperationSystem.StartOperation(_buildinManifestLoad); OperationSystem.StartOperation(_buildinManifestLoad);
} }
@ -173,14 +171,8 @@ namespace YooAsset
if (_steps == ESteps.StartVerifyOperation) if (_steps == ESteps.StartVerifyOperation)
{ {
#if UNITY_WEBGL _verifyOperation = VerifyCacheFilesOperation.CreateOperation(_impl.ActivePatchManifest, _impl);
_verifyOperation = new CacheFilesVerifyWithoutThreadOperation(_impl.ActivePatchManifest, _impl);
#else
_verifyOperation = new CacheFilesVerifyWithThreadOperation(_impl.ActivePatchManifest, _impl);
#endif
OperationSystem.StartOperation(_verifyOperation); OperationSystem.StartOperation(_verifyOperation);
_verifyTime = UnityEngine.Time.realtimeSinceStartup;
_steps = ESteps.CheckVerifyOperation; _steps = ESteps.CheckVerifyOperation;
} }
@ -191,8 +183,6 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyTime;
YooLogger.Log($"Verify result : Success {_verifyOperation.VerifySuccessList.Count}, Fail {_verifyOperation.VerifyFailList.Count}, Elapsed time {costTime} seconds");
} }
} }
} }
@ -219,13 +209,12 @@ namespace YooAsset
private readonly HostPlayModeImpl _impl; private readonly HostPlayModeImpl _impl;
private readonly string _packageName; private readonly string _packageName;
private BuildinPackageVersionQueryOperation _buildinPackageVersionQuery; private QueryBuildinPackageVersionOperation _buildinPackageVersionQuery;
private BuildinManifestCopyOperation _buildinManifestCopy; private CopyBuildinManifestOperation _buildinManifestCopy;
private BuildinManifestLoadOperation _buildinManifestLoad; private LoadBuildinManifestOperation _buildinManifestLoad;
private CacheManifestLoadOperation _cacheManifestLoad; private LoadCacheManifestOperation _cacheManifestLoad;
private CacheFilesVerifyOperation _verifyOperation; private VerifyCacheFilesOperation _verifyOperation;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private float _verifyTime;
internal HostPlayModeInitializationOperation(HostPlayModeImpl impl, string packageName) internal HostPlayModeInitializationOperation(HostPlayModeImpl impl, string packageName)
{ {
@ -260,7 +249,7 @@ namespace YooAsset
{ {
if (_cacheManifestLoad == null) if (_cacheManifestLoad == null)
{ {
_cacheManifestLoad = new CacheManifestLoadOperation(_packageName); _cacheManifestLoad = new LoadCacheManifestOperation(_packageName);
OperationSystem.StartOperation(_cacheManifestLoad); OperationSystem.StartOperation(_cacheManifestLoad);
} }
@ -283,7 +272,7 @@ namespace YooAsset
{ {
if (_buildinPackageVersionQuery == null) if (_buildinPackageVersionQuery == null)
{ {
_buildinPackageVersionQuery = new BuildinPackageVersionQueryOperation(_packageName); _buildinPackageVersionQuery = new QueryBuildinPackageVersionOperation(_packageName);
OperationSystem.StartOperation(_buildinPackageVersionQuery); OperationSystem.StartOperation(_buildinPackageVersionQuery);
} }
@ -308,7 +297,7 @@ namespace YooAsset
{ {
if (_buildinManifestCopy == null) if (_buildinManifestCopy == null)
{ {
_buildinManifestCopy = new BuildinManifestCopyOperation(_packageName, _buildinPackageVersionQuery.Version); _buildinManifestCopy = new CopyBuildinManifestOperation(_packageName, _buildinPackageVersionQuery.Version);
OperationSystem.StartOperation(_buildinManifestCopy); OperationSystem.StartOperation(_buildinManifestCopy);
} }
@ -332,7 +321,7 @@ namespace YooAsset
{ {
if (_buildinManifestLoad == null) if (_buildinManifestLoad == null)
{ {
_buildinManifestLoad = new BuildinManifestLoadOperation(_packageName, _buildinPackageVersionQuery.Version); _buildinManifestLoad = new LoadBuildinManifestOperation(_packageName, _buildinPackageVersionQuery.Version);
OperationSystem.StartOperation(_buildinManifestLoad); OperationSystem.StartOperation(_buildinManifestLoad);
} }
@ -356,14 +345,8 @@ namespace YooAsset
if (_steps == ESteps.StartVerifyOperation) if (_steps == ESteps.StartVerifyOperation)
{ {
#if UNITY_WEBGL _verifyOperation = VerifyCacheFilesOperation.CreateOperation(_impl.ActivePatchManifest, _impl);
_verifyOperation = new CacheFilesVerifyWithoutThreadOperation(_impl.ActivePatchManifest, _impl);
#else
_verifyOperation = new CacheFilesVerifyWithThreadOperation(_impl.ActivePatchManifest, _impl);
#endif
OperationSystem.StartOperation(_verifyOperation); OperationSystem.StartOperation(_verifyOperation);
_verifyTime = UnityEngine.Time.realtimeSinceStartup;
_steps = ESteps.CheckVerifyOperation; _steps = ESteps.CheckVerifyOperation;
} }
@ -374,8 +357,6 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyTime;
YooLogger.Log($"Verify result : Success {_verifyOperation.VerifySuccessList.Count}, Fail {_verifyOperation.VerifyFailList.Count}, Elapsed time {costTime} seconds");
} }
} }
} }

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ba3f4fc8cf6941f4a96ab928cec547e3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -4,7 +4,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 内置补丁清单复制器 /// 内置补丁清单复制器
/// </summary> /// </summary>
internal class BuildinManifestCopyOperation : AsyncOperationBase internal class CopyBuildinManifestOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@ -20,7 +20,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
public BuildinManifestCopyOperation(string buildinPackageName, string buildinPackageVersion) public CopyBuildinManifestOperation(string buildinPackageName, string buildinPackageVersion)
{ {
_buildinPackageName = buildinPackageName; _buildinPackageName = buildinPackageName;
_buildinPackageVersion = buildinPackageVersion; _buildinPackageVersion = buildinPackageVersion;

View File

@ -19,15 +19,13 @@ namespace YooAsset
public PatchManifest Manifest { private set; get; } public PatchManifest Manifest { private set; get; }
private readonly BufferReader _buffer; private readonly BufferReader _buffer;
private ESteps _steps = ESteps.None;
private int _patchAssetCount; private int _patchAssetCount;
private int _patchBundleCount; private int _patchBundleCount;
private int _progressTotalValue; private int _progressTotalValue;
private ESteps _steps = ESteps.None;
public DeserializeManifestOperation(byte[] binaryData) public DeserializeManifestOperation(byte[] binaryData)
{ {
// 创建缓存器
_buffer = new BufferReader(binaryData); _buffer = new BufferReader(binaryData);
} }
internal override void Start() internal override void Start()
@ -43,13 +41,21 @@ namespace YooAsset
{ {
if (_steps == ESteps.DeserializeFileHeader) if (_steps == ESteps.DeserializeFileHeader)
{ {
if (_buffer.IsValid == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Buffer is invalid !";
return;
}
// 读取文件标记 // 读取文件标记
uint fileSign = _buffer.ReadUInt32(); uint fileSign = _buffer.ReadUInt32();
if (fileSign != YooAssetSettings.PatchManifestFileSign) if (fileSign != YooAssetSettings.PatchManifestFileSign)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = "Invalid manifest file format !"; Error = "The manifest file format is invalid !";
return; return;
} }
@ -151,7 +157,7 @@ namespace YooAsset
} }
} }
} }
catch(System.Exception e) catch (System.Exception e)
{ {
Manifest = null; Manifest = null;
_steps = ESteps.Done; _steps = ESteps.Done;

View File

@ -4,7 +4,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 内置补丁清单加载器 /// 内置补丁清单加载器
/// </summary> /// </summary>
internal class BuildinManifestLoadOperation : AsyncOperationBase internal class LoadBuildinManifestOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@ -27,7 +27,7 @@ namespace YooAsset
public PatchManifest Manifest { private set; get; } public PatchManifest Manifest { private set; get; }
public BuildinManifestLoadOperation(string buildinPackageName, string buildinPackageVersion) public LoadBuildinManifestOperation(string buildinPackageName, string buildinPackageVersion)
{ {
_buildinPackageName = buildinPackageName; _buildinPackageName = buildinPackageName;
_buildinPackageVersion = buildinPackageVersion; _buildinPackageVersion = buildinPackageVersion;

View File

@ -5,7 +5,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 沙盒补丁清单加载器 /// 沙盒补丁清单加载器
/// </summary> /// </summary>
internal class CacheManifestLoadOperation : AsyncOperationBase internal class LoadCacheManifestOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@ -17,8 +17,8 @@ namespace YooAsset
private readonly string _packageName; private readonly string _packageName;
private DeserializeManifestOperation _deserializer; private DeserializeManifestOperation _deserializer;
private ESteps _steps = ESteps.None;
private string _manifestFilePath; private string _manifestFilePath;
private ESteps _steps = ESteps.None;
/// <summary> /// <summary>
/// 加载结果 /// 加载结果
@ -26,7 +26,7 @@ namespace YooAsset
public PatchManifest Manifest { private set; get; } public PatchManifest Manifest { private set; get; }
public CacheManifestLoadOperation(string packageName) public LoadCacheManifestOperation(string packageName)
{ {
_packageName = packageName; _packageName = packageName;
} }

View File

@ -4,7 +4,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 内置补丁清单版本查询器 /// 内置补丁清单版本查询器
/// </summary> /// </summary>
internal class BuildinPackageVersionQueryOperation : AsyncOperationBase internal class QueryBuildinPackageVersionOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@ -24,7 +24,7 @@ namespace YooAsset
public string Version { private set; get; } public string Version { private set; get; }
public BuildinPackageVersionQueryOperation(string packageName) public QueryBuildinPackageVersionOperation(string packageName)
{ {
_packageName = packageName; _packageName = packageName;
} }

View File

@ -9,16 +9,26 @@ namespace YooAsset
/// <summary> /// <summary>
/// 本地缓存文件验证 /// 本地缓存文件验证
/// </summary> /// </summary>
internal abstract class CacheFilesVerifyOperation : AsyncOperationBase internal abstract class VerifyCacheFilesOperation : AsyncOperationBase
{ {
public List<VerifyInfo> VerifySuccessList { protected set; get; } public List<VerifyInfo> VerifySuccessList { protected set; get; }
public List<VerifyInfo> VerifyFailList { protected set; get; } public List<VerifyInfo> VerifyFailList { protected set; get; }
public static VerifyCacheFilesOperation CreateOperation(PatchManifest patchManifest, IPlayModeServices playModeServices)
{
#if UNITY_WEBGL
VerifyCacheFilesOperation operation = new VerifyCacheFilesWithoutThreadOperation(patchManifest, playModeServices);
#else
VerifyCacheFilesOperation operation = new VerifyCacheFilesWithThreadOperation(patchManifest, playModeServices);
#endif
return operation;
}
} }
/// <summary> /// <summary>
/// 本地缓存文件验证(线程版) /// 本地缓存文件验证(线程版)
/// </summary> /// </summary>
internal class CacheFilesVerifyWithThreadOperation : CacheFilesVerifyOperation internal class VerifyCacheFilesWithThreadOperation : VerifyCacheFilesOperation
{ {
private enum ESteps private enum ESteps
{ {
@ -31,15 +41,15 @@ namespace YooAsset
private readonly PatchManifest _patchManifest; private readonly PatchManifest _patchManifest;
private readonly IPlayModeServices _playModeServices; private readonly IPlayModeServices _playModeServices;
private ESteps _steps = ESteps.None;
private readonly ThreadSyncContext _syncContext = new ThreadSyncContext(); private readonly ThreadSyncContext _syncContext = new ThreadSyncContext();
private List<VerifyInfo> _waitingList; private List<VerifyInfo> _waitingList;
private List<VerifyInfo> _verifyingList; private List<VerifyInfo> _verifyingList;
private int _verifyMaxNum; private int _verifyMaxNum;
private int _verifyTotalCount; private int _verifyTotalCount;
private float _verifyStartTime;
private ESteps _steps = ESteps.None;
public CacheFilesVerifyWithThreadOperation(PatchManifest patchManifest, IPlayModeServices playModeServices) public VerifyCacheFilesWithThreadOperation(PatchManifest patchManifest, IPlayModeServices playModeServices)
{ {
_patchManifest = patchManifest; _patchManifest = patchManifest;
_playModeServices = playModeServices; _playModeServices = playModeServices;
@ -47,6 +57,7 @@ namespace YooAsset
internal override void Start() internal override void Start()
{ {
_steps = ESteps.InitVerify; _steps = ESteps.InitVerify;
_verifyStartTime = UnityEngine.Time.realtimeSinceStartup;
} }
internal override void Update() internal override void Update()
{ {
@ -95,6 +106,8 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyStartTime;
YooLogger.Log($"Verify elapsed time {costTime:f1} seconds");
} }
for (int i = _waitingList.Count - 1; i >= 0; i--) for (int i = _waitingList.Count - 1; i >= 0; i--)
@ -162,7 +175,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 本地缓存文件验证(非线程版) /// 本地缓存文件验证(非线程版)
/// </summary> /// </summary>
internal class CacheFilesVerifyWithoutThreadOperation : CacheFilesVerifyOperation internal class VerifyCacheFilesWithoutThreadOperation : VerifyCacheFilesOperation
{ {
private enum ESteps private enum ESteps
{ {
@ -175,14 +188,14 @@ namespace YooAsset
private readonly PatchManifest _patchManifest; private readonly PatchManifest _patchManifest;
private readonly IPlayModeServices _playModeServices; private readonly IPlayModeServices _playModeServices;
private ESteps _steps = ESteps.None;
private List<VerifyInfo> _waitingList; private List<VerifyInfo> _waitingList;
private List<VerifyInfo> _verifyingList; private List<VerifyInfo> _verifyingList;
private int _verifyMaxNum; private int _verifyMaxNum;
private int _verifyTotalCount; private int _verifyTotalCount;
private float _verifyStartTime;
private ESteps _steps = ESteps.None;
public CacheFilesVerifyWithoutThreadOperation(PatchManifest patchManifest, IPlayModeServices playModeServices) public VerifyCacheFilesWithoutThreadOperation(PatchManifest patchManifest, IPlayModeServices playModeServices)
{ {
_patchManifest = patchManifest; _patchManifest = patchManifest;
_playModeServices = playModeServices; _playModeServices = playModeServices;
@ -190,6 +203,7 @@ namespace YooAsset
internal override void Start() internal override void Start()
{ {
_steps = ESteps.InitVerify; _steps = ESteps.InitVerify;
_verifyStartTime = UnityEngine.Time.realtimeSinceStartup;
} }
internal override void Update() internal override void Update()
{ {
@ -232,6 +246,8 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyStartTime;
YooLogger.Log($"Verify elapsed time {costTime:f1} seconds");
} }
for (int i = _waitingList.Count - 1; i >= 0; i--) for (int i = _waitingList.Count - 1; i >= 0; i--)

View File

@ -10,131 +10,20 @@ namespace YooAsset
/// </summary> /// </summary>
public abstract class UpdatePackageManifestOperation : AsyncOperationBase public abstract class UpdatePackageManifestOperation : AsyncOperationBase
{ {
internal IPlayModeServices _playModeServices;
internal PatchManifest _patchManifest;
/// <summary> /// <summary>
/// 是否发现了新的补丁清单 /// 发现了新的清单
/// </summary> /// </summary>
public bool FoundNewManifest { protected set; get; } = false; public bool FoundNewManifest { protected set; get; } = false;
#region 资源下载
/// <summary> /// <summary>
/// 创建补丁下载器,用于下载更新资源标签指定的资源包文件 /// 手动保存清单文件
/// </summary> /// </summary>
/// <param name="tag">资源标签</param> public virtual void SaveManifestFile() { }
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
/// <param name="timeout">超时时间</param>
public PatchDownloaderOperation CreatePatchDownloader(string tag, int downloadingMaxNumber, int failedTryAgain, int timeout = 60)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call downloader !");
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
return _playModeServices.CreatePatchDownloaderByTags(_patchManifest, new string[] { tag }, downloadingMaxNumber, failedTryAgain, timeout);
}
/// <summary> /// <summary>
/// 创建补丁下载器,用于下载更新资源标签指定的资源包文件 /// 还原补丁清单
/// </summary> /// </summary>
/// <param name="tags">资源标签列表</param> public virtual void RevertManifest() { }
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
/// <param name="timeout">超时时间</param>
public PatchDownloaderOperation CreatePatchDownloader(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout = 60)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call downloader !");
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
return _playModeServices.CreatePatchDownloaderByTags(_patchManifest, tags, downloadingMaxNumber, failedTryAgain, timeout);
}
/// <summary>
/// 创建补丁下载器,用于下载更新当前资源版本所有的资源包文件
/// </summary>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
/// <param name="timeout">超时时间</param>
public PatchDownloaderOperation CreatePatchDownloader(int downloadingMaxNumber, int failedTryAgain, int timeout = 60)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call downloader !");
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
return _playModeServices.CreatePatchDownloaderByAll(_patchManifest, downloadingMaxNumber, failedTryAgain, timeout);
}
/// <summary>
/// 创建补丁下载器,用于下载更新指定的资源列表依赖的资源包文件
/// </summary>
/// <param name="assetInfos">资源信息列表</param>
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
/// <param name="failedTryAgain">下载失败的重试次数</param>
/// <param name="timeout">超时时间</param>
public PatchDownloaderOperation CreateBundleDownloader(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout = 60)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call downloader !");
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
return _playModeServices.CreatePatchDownloaderByPaths(_patchManifest, assetInfos, downloadingMaxNumber, failedTryAgain, timeout);
}
#endregion
#region 资源解压
/// <summary>
/// 创建补丁解压器
/// </summary>
/// <param name="tag">资源标签</param>
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
/// <param name="failedTryAgain">解压失败的重试次数</param>
public PatchUnpackerOperation CreatePatchUnpacker(string tag, int unpackingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call unpacker !");
return PatchUnpackerOperation.CreateEmptyUnpacker(unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
return _playModeServices.CreatePatchUnpackerByTags(_patchManifest, new string[] { tag }, unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
/// <summary>
/// 创建补丁解压器
/// </summary>
/// <param name="tags">资源标签列表</param>
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
/// <param name="failedTryAgain">解压失败的重试次数</param>
public PatchUnpackerOperation CreatePatchUnpacker(string[] tags, int unpackingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call unpacker !");
return PatchUnpackerOperation.CreateEmptyUnpacker(unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
return _playModeServices.CreatePatchUnpackerByTags(_patchManifest, tags, unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
/// <summary>
/// 创建补丁解压器
/// </summary>
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
/// <param name="failedTryAgain">解压失败的重试次数</param>
public PatchUnpackerOperation CreatePatchUnpacker(int unpackingMaxNumber, int failedTryAgain)
{
if (Status != EOperationStatus.Succeed)
{
YooLogger.Error($"Please check { nameof(UpdatePackageManifestOperation)} status before call unpacker !");
return PatchUnpackerOperation.CreateEmptyUnpacker(unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
return _playModeServices.CreatePatchUnpackerByAll(_patchManifest, unpackingMaxNumber, failedTryAgain, int.MaxValue);
}
#endregion
} }
/// <summary> /// <summary>
@ -142,9 +31,8 @@ namespace YooAsset
/// </summary> /// </summary>
internal sealed class EditorPlayModeUpdatePackageManifestOperation : UpdatePackageManifestOperation internal sealed class EditorPlayModeUpdatePackageManifestOperation : UpdatePackageManifestOperation
{ {
public EditorPlayModeUpdatePackageManifestOperation(EditorSimulateModeImpl impl) public EditorPlayModeUpdatePackageManifestOperation()
{ {
_playModeServices = impl;
} }
internal override void Start() internal override void Start()
{ {
@ -160,9 +48,8 @@ namespace YooAsset
/// </summary> /// </summary>
internal sealed class OfflinePlayModeUpdatePackageManifestOperation : UpdatePackageManifestOperation internal sealed class OfflinePlayModeUpdatePackageManifestOperation : UpdatePackageManifestOperation
{ {
public OfflinePlayModeUpdatePackageManifestOperation(OfflinePlayModeImpl impl) public OfflinePlayModeUpdatePackageManifestOperation()
{ {
_playModeServices = impl;
} }
internal override void Start() internal override void Start()
{ {
@ -197,27 +84,24 @@ namespace YooAsset
private readonly HostPlayModeImpl _impl; private readonly HostPlayModeImpl _impl;
private readonly string _packageName; private readonly string _packageName;
private readonly string _packageVersion; private readonly string _packageVersion;
private bool _autoSaveManifest; private readonly bool _autoSaveManifestFile;
private bool _autoActiveManifest;
private readonly int _timeout; private readonly int _timeout;
private UnityWebDataRequester _downloader1; private UnityWebDataRequester _downloader1;
private UnityWebDataRequester _downloader2; private UnityWebDataRequester _downloader2;
private DeserializeManifestOperation _deserializer; private DeserializeManifestOperation _deserializer;
private CacheFilesVerifyOperation _verifyOperation; private VerifyCacheFilesOperation _verifyOperation;
internal PatchManifest _prePatchManifest;
private string _cacheManifestHash; private string _cacheManifestHash;
private byte[] _fileBytesData = null;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private byte[] _fileBytes = null;
private float _verifyTime;
internal HostPlayModeUpdatePackageManifestOperation(HostPlayModeImpl impl, string packageName, string packageVersion, bool autoSaveManifest, bool autoActiveManifest, int timeout) internal HostPlayModeUpdatePackageManifestOperation(HostPlayModeImpl impl, string packageName, string packageVersion, bool autoSaveManifestFile, int timeout)
{ {
_playModeServices = impl;
_impl = impl; _impl = impl;
_packageName = packageName; _packageName = packageName;
_packageVersion = packageVersion; _packageVersion = packageVersion;
_autoSaveManifest = autoSaveManifest; _autoSaveManifestFile = autoSaveManifestFile;
_autoActiveManifest = autoActiveManifest;
_timeout = timeout; _timeout = timeout;
} }
internal override void Start() internal override void Start()
@ -271,7 +155,6 @@ namespace YooAsset
if (_cacheManifestHash == webManifestHash) if (_cacheManifestHash == webManifestHash)
{ {
YooLogger.Log($"Not found new package : {_packageName}"); YooLogger.Log($"Not found new package : {_packageName}");
_patchManifest = _impl.ActivePatchManifest;
FoundNewManifest = false; FoundNewManifest = false;
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
@ -310,16 +193,13 @@ namespace YooAsset
else else
{ {
byte[] bytesData = _downloader2.GetData(); byte[] bytesData = _downloader2.GetData();
if (_autoSaveManifestFile)
// 保存文件到沙盒内
if (_autoSaveManifest)
{ {
string savePath = PersistentHelper.GetCacheManifestFilePath(_packageName); SaveManifestFileInternal(bytesData);
FileUtility.CreateFile(savePath, bytesData);
} }
else else
{ {
_fileBytes = bytesData; _fileBytesData = bytesData;
} }
// 解析二进制数据 // 解析二进制数据
@ -334,16 +214,13 @@ namespace YooAsset
if (_steps == ESteps.CheckDeserializeWebManifest) if (_steps == ESteps.CheckDeserializeWebManifest)
{ {
Progress = _deserializer.Progress; Progress = _deserializer.Progress;
if (_deserializer.IsDone) if (_deserializer.IsDone == false)
{ return;
if (_deserializer.Status == EOperationStatus.Succeed) if (_deserializer.Status == EOperationStatus.Succeed)
{ {
if (_autoActiveManifest) _prePatchManifest = _impl.ActivePatchManifest;
{
_impl.ActivePatchManifest = _deserializer.Manifest; _impl.ActivePatchManifest = _deserializer.Manifest;
}
_patchManifest = _deserializer.Manifest;
_steps = ESteps.StartVerifyOperation; _steps = ESteps.StartVerifyOperation;
} }
else else
@ -353,18 +230,11 @@ namespace YooAsset
Error = _deserializer.Error; Error = _deserializer.Error;
} }
} }
}
if (_steps == ESteps.StartVerifyOperation) if (_steps == ESteps.StartVerifyOperation)
{ {
#if UNITY_WEBGL _verifyOperation = VerifyCacheFilesOperation.CreateOperation(_deserializer.Manifest, _impl);
_verifyOperation = new CacheFilesVerifyWithoutThreadOperation(_deserializer.Manifest, _impl);
#else
_verifyOperation = new CacheFilesVerifyWithThreadOperation(_deserializer.Manifest, _impl);
#endif
OperationSystem.StartOperation(_verifyOperation); OperationSystem.StartOperation(_verifyOperation);
_verifyTime = UnityEngine.Time.realtimeSinceStartup;
_steps = ESteps.CheckVerifyOperation; _steps = ESteps.CheckVerifyOperation;
} }
@ -375,8 +245,6 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
float costTime = UnityEngine.Time.realtimeSinceStartup - _verifyTime;
YooLogger.Log($"Verify result : Success {_verifyOperation.VerifySuccessList.Count}, Fail {_verifyOperation.VerifyFailList.Count}, Elapsed time {costTime} seconds");
} }
} }
} }
@ -384,37 +252,50 @@ namespace YooAsset
/// <summary> /// <summary>
/// 手动保存清单文件 /// 手动保存清单文件
/// </summary> /// </summary>
public void SaveManifest() public override void SaveManifestFile()
{ {
if (_autoSaveManifest == false) if (IsDone == false)
{ {
if (_fileBytes != null) YooLogger.Warning($"{nameof(UpdatePackageManifestOperation)} is not done !");
return;
}
if (Status == EOperationStatus.Succeed)
{
if (_fileBytesData != null)
{
SaveManifestFileInternal(_fileBytesData);
_fileBytesData = null;
}
}
}
/// <summary>
/// 还原补丁清单
/// </summary>
public override void RevertManifest()
{
if (IsDone == false)
{
YooLogger.Warning($"{nameof(UpdatePackageManifestOperation)} is not done !");
return;
}
if (Status == EOperationStatus.Succeed)
{
if (_prePatchManifest != null)
{
_impl.ActivePatchManifest = _prePatchManifest;
_prePatchManifest = null;
}
}
}
private void SaveManifestFileInternal(byte[] bytesData)
{ {
_autoSaveManifest = true;
string savePath = PersistentHelper.GetCacheManifestFilePath(_packageName); string savePath = PersistentHelper.GetCacheManifestFilePath(_packageName);
FileUtility.CreateFile(savePath, _fileBytes); FileUtility.CreateFile(savePath, bytesData);
} }
}
}
/// <summary>
/// 手动激活清单文件
/// </summary>
public void ActiveManifest()
{
if (_autoActiveManifest == false)
{
if (_deserializer.Status == EOperationStatus.Succeed)
{
_autoActiveManifest = true;
_impl.ActivePatchManifest = _deserializer.Manifest;
}
}
}
/// <summary>
/// 获取补丁清单请求地址
/// </summary>
private string GetPatchManifestRequestURL(string fileName) private string GetPatchManifestRequestURL(string fileName)
{ {
// 轮流返回请求地址 // 轮流返回请求地址

View File

@ -51,8 +51,8 @@ namespace YooAsset
private enum ESteps private enum ESteps
{ {
None, None,
LoadStaticVersion, LoadPackageVersion,
CheckStaticVersion, CheckLoadPackageVersion,
Done, Done,
} }
@ -74,24 +74,24 @@ namespace YooAsset
internal override void Start() internal override void Start()
{ {
RequestCount++; RequestCount++;
_steps = ESteps.LoadStaticVersion; _steps = ESteps.LoadPackageVersion;
} }
internal override void Update() internal override void Update()
{ {
if (_steps == ESteps.None || _steps == ESteps.Done) if (_steps == ESteps.None || _steps == ESteps.Done)
return; return;
if (_steps == ESteps.LoadStaticVersion) if (_steps == ESteps.LoadPackageVersion)
{ {
string fileName = YooAssetSettingsData.GetPatchManifestVersionFileName(_packageName); string fileName = YooAssetSettingsData.GetPatchManifestVersionFileName(_packageName);
string webURL = GetStaticVersionRequestURL(fileName); string webURL = GetPackageVersionRequestURL(fileName);
YooLogger.Log($"Beginning to request package version : {webURL}"); YooLogger.Log($"Beginning to request package version : {webURL}");
_downloader = new UnityWebDataRequester(); _downloader = new UnityWebDataRequester();
_downloader.SendRequest(webURL, _timeout); _downloader.SendRequest(webURL, _timeout);
_steps = ESteps.CheckStaticVersion; _steps = ESteps.CheckLoadPackageVersion;
} }
if (_steps == ESteps.CheckStaticVersion) if (_steps == ESteps.CheckLoadPackageVersion)
{ {
Progress = _downloader.Progress(); Progress = _downloader.Progress();
if (_downloader.IsDone() == false) if (_downloader.IsDone() == false)
@ -123,7 +123,7 @@ namespace YooAsset
} }
} }
private string GetStaticVersionRequestURL(string fileName) private string GetPackageVersionRequestURL(string fileName)
{ {
string url; string url;

View File

@ -52,59 +52,36 @@ namespace YooAsset
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifest, bool autoActiveManifest, int timeout) UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifestFile, int timeout)
{ {
var operation = new EditorPlayModeUpdatePackageManifestOperation(this); var operation = new EditorPlayModeUpdatePackageManifestOperation();
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
CheckPackageContentsOperation IPlayModeServices.CheckPackageContentsAsync() CheckContentsIntegrityOperation IPlayModeServices.CheckContentsIntegrityAsync()
{ {
var operation = new EditorSimulateModeCheckPackageContentsOperation(); var operation = new EditorSimulateModeCheckContentsIntegrityOperation();
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(PatchManifest patchManifest, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(PatchManifest patchManifest, string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(PatchManifest patchManifest, AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(PatchManifest patchManifest, int upackingMaxNumber, int failedTryAgain, int timeout)
{
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout); return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(PatchManifest patchManifest, string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout); return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);

View File

@ -109,25 +109,19 @@ namespace YooAsset
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifest, bool autoActiveManifest, int timeout) UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifestFile, int timeout)
{ {
var operation = new HostPlayModeUpdatePackageManifestOperation(this, _packageName, packageVersion, autoSaveManifest, autoActiveManifest, timeout); var operation = new HostPlayModeUpdatePackageManifestOperation(this, _packageName, packageVersion, autoSaveManifestFile, timeout);
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
CheckPackageContentsOperation IPlayModeServices.CheckPackageContentsAsync() CheckContentsIntegrityOperation IPlayModeServices.CheckContentsIntegrityAsync()
{ {
var operation = new HostPlayModeCheckPackageContentsOperation(this, _packageName); var operation = new HostPlayModeCheckContentsIntegrityOperation(this, _packageName);
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(PatchManifest patchManifest, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
List<BundleInfo> downloadList = GetDownloadListByAll(patchManifest);
var operation = new PatchDownloaderOperation(downloadList, downloadingMaxNumber, failedTryAgain, timeout);
return operation;
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
List<BundleInfo> downloadList = GetDownloadListByAll(_activePatchManifest); List<BundleInfo> downloadList = GetDownloadListByAll(_activePatchManifest);
@ -153,12 +147,6 @@ namespace YooAsset
return ConvertToDownloadList(downloadList); return ConvertToDownloadList(downloadList);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(PatchManifest patchManifest, string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
List<BundleInfo> downloadList = GetDownloadListByTags(patchManifest, tags);
var operation = new PatchDownloaderOperation(downloadList, downloadingMaxNumber, failedTryAgain, timeout);
return operation;
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
List<BundleInfo> downloadList = GetDownloadListByTags(_activePatchManifest, tags); List<BundleInfo> downloadList = GetDownloadListByTags(_activePatchManifest, tags);
@ -196,12 +184,6 @@ namespace YooAsset
return ConvertToDownloadList(downloadList); return ConvertToDownloadList(downloadList);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(PatchManifest patchManifest, AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
List<BundleInfo> downloadList = GetDownloadListByPaths(patchManifest, assetInfos);
var operation = new PatchDownloaderOperation(downloadList, downloadingMaxNumber, failedTryAgain, timeout);
return operation;
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
List<BundleInfo> downloadList = GetDownloadListByPaths(_activePatchManifest, assetInfos); List<BundleInfo> downloadList = GetDownloadListByPaths(_activePatchManifest, assetInfos);
@ -251,12 +233,6 @@ namespace YooAsset
return ConvertToDownloadList(downloadList); return ConvertToDownloadList(downloadList);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(PatchManifest patchManifest, int upackingMaxNumber, int failedTryAgain, int timeout)
{
List<BundleInfo> unpcakList = GetUnpackListByAll(patchManifest);
var operation = new PatchUnpackerOperation(unpcakList, upackingMaxNumber, failedTryAgain, timeout);
return operation;
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
List<BundleInfo> unpcakList = GetUnpackListByAll(_activePatchManifest); List<BundleInfo> unpcakList = GetUnpackListByAll(_activePatchManifest);
@ -281,12 +257,6 @@ namespace YooAsset
return ConvertToUnpackList(downloadList); return ConvertToUnpackList(downloadList);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(PatchManifest patchManifest, string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{
List<BundleInfo> unpcakList = GetUnpackListByTags(patchManifest, tags);
var operation = new PatchUnpackerOperation(unpcakList, upackingMaxNumber, failedTryAgain, timeout);
return operation;
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
List<BundleInfo> unpcakList = GetUnpackListByTags(_activePatchManifest, tags); List<BundleInfo> unpcakList = GetUnpackListByTags(_activePatchManifest, tags);

View File

@ -52,59 +52,36 @@ namespace YooAsset
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifest, bool autoActiveManifest, int timeout) UpdatePackageManifestOperation IPlayModeServices.UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifestFile, int timeout)
{ {
var operation = new OfflinePlayModeUpdatePackageManifestOperation(this); var operation = new OfflinePlayModeUpdatePackageManifestOperation();
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
CheckPackageContentsOperation IPlayModeServices.CheckPackageContentsAsync() CheckContentsIntegrityOperation IPlayModeServices.CheckContentsIntegrityAsync()
{ {
var operation = new OfflinePlayModeCheckPackageContentsOperation(); var operation = new OfflinePlayModeCheckContentsIntegrityOperation();
OperationSystem.StartOperation(operation); OperationSystem.StartOperation(operation);
return operation; return operation;
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(PatchManifest patchManifest, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(PatchManifest patchManifest, string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(PatchManifest patchManifest, AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
}
PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout) PatchDownloaderOperation IPlayModeServices.CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout); return PatchDownloaderOperation.CreateEmptyDownloader(downloadingMaxNumber, failedTryAgain, timeout);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(PatchManifest patchManifest, int upackingMaxNumber, int failedTryAgain, int timeout)
{
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout); return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
} }
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(PatchManifest patchManifest, string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);
}
PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout) PatchUnpackerOperation IPlayModeServices.CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout)
{ {
return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout); return PatchUnpackerOperation.CreateEmptyUnpacker(upackingMaxNumber, failedTryAgain, timeout);

View File

@ -26,25 +26,20 @@ namespace YooAsset
/// <summary> /// <summary>
/// 向网络端请求并更新补丁清单 /// 向网络端请求并更新补丁清单
/// </summary> /// </summary>
UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifest, bool autoActiveManifest, int timeout); UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveManifestFile, int timeout);
/// <summary> /// <summary>
/// 检查本地包裹内容的完整性 /// 检查包裹内容的完整性
/// </summary> /// </summary>
CheckPackageContentsOperation CheckPackageContentsAsync(); CheckContentsIntegrityOperation CheckContentsIntegrityAsync();
// 下载相关方法 // 下载相关方法
PatchDownloaderOperation CreatePatchDownloaderByAll(PatchManifest patchManifest, int downloadingMaxNumber, int failedTryAgain, int timeout);
PatchDownloaderOperation CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout); PatchDownloaderOperation CreatePatchDownloaderByAll(int downloadingMaxNumber, int failedTryAgain, int timeout);
PatchDownloaderOperation CreatePatchDownloaderByTags(PatchManifest patchManifest, string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout);
PatchDownloaderOperation CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout); PatchDownloaderOperation CreatePatchDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain, int timeout);
PatchDownloaderOperation CreatePatchDownloaderByPaths(PatchManifest patchManifest, AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout);
PatchDownloaderOperation CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout); PatchDownloaderOperation CreatePatchDownloaderByPaths(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout);
// 解压相关方法 // 解压相关方法
PatchUnpackerOperation CreatePatchUnpackerByAll(PatchManifest patchManifest, int upackingMaxNumber, int failedTryAgain, int timeout);
PatchUnpackerOperation CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout); PatchUnpackerOperation CreatePatchUnpackerByAll(int upackingMaxNumber, int failedTryAgain, int timeout);
PatchUnpackerOperation CreatePatchUnpackerByTags(PatchManifest patchManifest, string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout);
PatchUnpackerOperation CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout); PatchUnpackerOperation CreatePatchUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain, int timeout);
} }
} }

View File

@ -16,6 +16,20 @@ namespace YooAsset
_buffer = data; _buffer = data;
} }
/// <summary>
/// 是否有效
/// </summary>
public bool IsValid
{
get
{
if (_buffer == null || _buffer.Length == 0)
return false;
else
return true;
}
}
/// <summary> /// <summary>
/// 缓冲区容量 /// 缓冲区容量
/// </summary> /// </summary>