diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderHelper.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderHelper.cs
index eb11b8f7..5b1b71e1 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderHelper.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderHelper.cs
@@ -22,7 +22,7 @@ namespace YooAsset.Editor
///
public static string GetStreamingAssetsRoot()
{
- return YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ return YooAssetSettingsData.GetYooDefaultBuiltinRoot();
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
index ca505253..54cc18cb 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
@@ -31,7 +31,7 @@ namespace YooAsset.Editor
// 创建新补丁清单
PackageManifest manifest = new PackageManifest();
- manifest.FileVersion = PackageManifestDefine.FileVersion;
+ manifest.FileVersion = PackageManifestConsts.FileVersion;
manifest.EnableAddressable = buildMapContext.Command.EnableAddressable;
manifest.SupportExtensionless = buildMapContext.Command.SupportExtensionless;
manifest.LocationToLower = buildMapContext.Command.LocationToLower;
diff --git a/Assets/YooAsset/Editor/AssetBundleDebugger/AssetBundleDebuggerWindow.cs b/Assets/YooAsset/Editor/AssetBundleDebugger/AssetBundleDebuggerWindow.cs
index 511e40c1..094ce07c 100644
--- a/Assets/YooAsset/Editor/AssetBundleDebugger/AssetBundleDebuggerWindow.cs
+++ b/Assets/YooAsset/Editor/AssetBundleDebugger/AssetBundleDebuggerWindow.cs
@@ -147,9 +147,9 @@ namespace YooAsset.Editor
EditorConnection.instance.Initialize();
EditorConnection.instance.RegisterConnection(OnHandleConnectionEvent);
EditorConnection.instance.RegisterDisconnection(OnHandleDisconnectionEvent);
- EditorConnection.instance.Register(DiagnosticSystemDefine.PlayerToEditorMessageId, OnHandlePlayerMessage);
+ EditorConnection.instance.Register(DiagnosticSystemConsts.PlayerToEditorMessageId, OnHandlePlayerMessage);
MockEditorConnection.Instance.Initialize();
- MockEditorConnection.Instance.Register(DiagnosticSystemDefine.PlayerToEditorMessageId, OnHandlePlayerMessage);
+ MockEditorConnection.Instance.Register(DiagnosticSystemConsts.PlayerToEditorMessageId, OnHandlePlayerMessage);
}
catch (Exception e)
{
@@ -161,8 +161,8 @@ namespace YooAsset.Editor
// 远程调试
EditorConnection.instance.UnregisterConnection(OnHandleConnectionEvent);
EditorConnection.instance.UnregisterDisconnection(OnHandleDisconnectionEvent);
- EditorConnection.instance.Unregister(DiagnosticSystemDefine.PlayerToEditorMessageId, OnHandlePlayerMessage);
- MockEditorConnection.Instance.Unregister(DiagnosticSystemDefine.PlayerToEditorMessageId, OnHandlePlayerMessage);
+ EditorConnection.instance.Unregister(DiagnosticSystemConsts.PlayerToEditorMessageId, OnHandlePlayerMessage);
+ MockEditorConnection.Instance.Unregister(DiagnosticSystemConsts.PlayerToEditorMessageId, OnHandlePlayerMessage);
_playerSessions.Clear();
}
public void Update()
@@ -194,9 +194,9 @@ namespace YooAsset.Editor
int playerId = args.playerId;
var debugReport = DiagnosticReport.Deserialize(args.data);
- if (debugReport.ProtocolVersion != DiagnosticSystemDefine.ProtocolVersion)
+ if (debugReport.ProtocolVersion != DiagnosticSystemConsts.ProtocolVersion)
{
- Debug.LogWarning($"Debugger versions are inconsistent : {debugReport.ProtocolVersion} != {DiagnosticSystemDefine.ProtocolVersion}");
+ Debug.LogWarning($"Debugger versions are inconsistent : {debugReport.ProtocolVersion} != {DiagnosticSystemConsts.ProtocolVersion}");
return;
}
@@ -258,8 +258,8 @@ namespace YooAsset.Editor
command.CommandType = (int)EDiagnosticCommandType.AutoSampling;
command.Parameter = evt.newValue ? "open" : "close";
byte[] data = DiagnosticCommand.Serialize(command);
- EditorConnection.instance.Send(DiagnosticSystemDefine.EditorToPlayerMessageId, data);
- MockEditorConnection.Instance.Send(DiagnosticSystemDefine.EditorToPlayerMessageId, data);
+ EditorConnection.instance.Send(DiagnosticSystemConsts.EditorToPlayerMessageId, data);
+ MockEditorConnection.Instance.Send(DiagnosticSystemConsts.EditorToPlayerMessageId, data);
}
private void SampleBtn_onClick()
@@ -269,8 +269,8 @@ namespace YooAsset.Editor
command.CommandType = (int)EDiagnosticCommandType.SampleOnce;
command.Parameter = string.Empty;
byte[] data = DiagnosticCommand.Serialize(command);
- EditorConnection.instance.Send(DiagnosticSystemDefine.EditorToPlayerMessageId, data);
- MockEditorConnection.Instance.Send(DiagnosticSystemDefine.EditorToPlayerMessageId, data);
+ EditorConnection.instance.Send(DiagnosticSystemConsts.EditorToPlayerMessageId, data);
+ MockEditorConnection.Instance.Send(DiagnosticSystemConsts.EditorToPlayerMessageId, data);
}
private void ExportBtn_clicked()
{
diff --git a/Assets/YooAsset/Runtime/AsyncOperation/AsyncOperationBase.cs b/Assets/YooAsset/Runtime/AsyncOperation/AsyncOperationBase.cs
index 0eaad370..e26220d4 100644
--- a/Assets/YooAsset/Runtime/AsyncOperation/AsyncOperationBase.cs
+++ b/Assets/YooAsset/Runtime/AsyncOperation/AsyncOperationBase.cs
@@ -358,7 +358,7 @@ namespace YooAsset
}
catch (Exception ex)
{
- YooLogger.Error($"Exception in inoke callback: {ex}");
+ YooLogger.Error($"Exception in invoke callback: {ex}");
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles.meta b/Assets/YooAsset/Runtime/BundleHandle.meta
similarity index 77%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles.meta
rename to Assets/YooAsset/Runtime/BundleHandle.meta
index 37e76299..d1c5054d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles.meta
+++ b/Assets/YooAsset/Runtime/BundleHandle.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: a9ca0d0d29eb5294b9c6926c6a09e76b
+guid: 4c4801976948fc14cb28d4982c9ebe5c
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EBundleType.cs b/Assets/YooAsset/Runtime/BundleHandle/EBundleType.cs
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/EBundleType.cs
rename to Assets/YooAsset/Runtime/BundleHandle/EBundleType.cs
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EBundleType.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/EBundleType.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/EBundleType.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/EBundleType.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces.meta b/Assets/YooAsset/Runtime/BundleHandle/Interfaces.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Interfaces.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Interfaces/IBundleHandle.cs b/Assets/YooAsset/Runtime/BundleHandle/Interfaces/IBundleHandle.cs
new file mode 100644
index 00000000..a274a6f2
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Interfaces/IBundleHandle.cs
@@ -0,0 +1,40 @@
+using UnityEngine.SceneManagement;
+
+namespace YooAsset
+{
+ ///
+ /// 资源包句柄接口,提供对已加载资源包的操作能力
+ ///
+ internal interface IBundleHandle
+ {
+ ///
+ /// 获取资源包文件的本地路径
+ ///
+ string GetBundleFilePath();
+
+ ///
+ /// 卸载资源包文件
+ ///
+ void UnloadBundleFile();
+
+ ///
+ /// 加载资源对象
+ ///
+ BHLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo);
+
+ ///
+ /// 加载所有资源对象
+ ///
+ BHLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo);
+
+ ///
+ /// 加载资源对象及所有子资源对象
+ ///
+ BHLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo);
+
+ ///
+ /// 加载场景对象
+ ///
+ BHLoadSceneOperation LoadSceneAsync(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces/IBundleResult.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Interfaces/IBundleHandle.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces/IBundleResult.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Interfaces/IBundleHandle.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations.meta b/Assets/YooAsset/Runtime/BundleHandle/Operations.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Operations.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Operations.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAllAssetsOperation.cs
new file mode 100644
index 00000000..8b127be4
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAllAssetsOperation.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载所有资源操作的抽象基类
+ ///
+ internal abstract class BHLoadAllAssetsOperation : AsyncOperationBase
+ {
+ ///
+ /// 加载的所有资源对象
+ ///
+ public UnityEngine.Object[] Result;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAllAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAllAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAllAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAllAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAssetOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAssetOperation.cs
new file mode 100644
index 00000000..81d52bc7
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAssetOperation.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载单个资源操作的抽象基类
+ ///
+ internal abstract class BHLoadAssetOperation : AsyncOperationBase
+ {
+ ///
+ /// 加载的资源对象
+ ///
+ public UnityEngine.Object Result;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAssetOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAssetOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAssetOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadAssetOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSceneOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSceneOperation.cs
new file mode 100644
index 00000000..166acd13
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSceneOperation.cs
@@ -0,0 +1,19 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载场景操作的抽象基类
+ ///
+ internal abstract class BHLoadSceneOperation : AsyncOperationBase
+ {
+ ///
+ /// 加载的场景对象
+ ///
+ public UnityEngine.SceneManagement.Scene Result;
+
+ ///
+ /// 恢复挂起的场景加载
+ ///
+ public abstract void ResumeLoad();
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSceneOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSceneOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSceneOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSceneOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSubAssetsOperation.cs
new file mode 100644
index 00000000..23ae464d
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSubAssetsOperation.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载子资源操作的抽象基类
+ ///
+ internal abstract class BHLoadSubAssetsOperation : AsyncOperationBase
+ {
+ ///
+ /// 加载的子资源对象集合
+ ///
+ public UnityEngine.Object[] Result;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSubAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSubAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSubAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Operations/BHLoadSubAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services.meta b/Assets/YooAsset/Runtime/BundleHandle/Services.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/AssetBundleResult.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/AssetBundleHandle.cs
similarity index 56%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/AssetBundleResult.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/AssetBundleHandle.cs
index abd271b9..866d6df4 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/AssetBundleResult.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/AssetBundleHandle.cs
@@ -1,17 +1,20 @@
-using System.IO;
+using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace YooAsset
{
- internal class AssetBundleResult : IBundleResult
+ ///
+ /// AssetBundle资源包句柄
+ ///
+ internal class AssetBundleHandle : IBundleHandle
{
private readonly string _bundleFilePath;
private readonly PackageBundle _packageBundle;
private readonly AssetBundle _assetBundle;
private readonly Stream _managedStream;
- public AssetBundleResult(string bundleFilePath, PackageBundle packageBundle, AssetBundle assetBundle, Stream managedStream)
+ public AssetBundleHandle(string bundleFilePath, PackageBundle packageBundle, AssetBundle assetBundle, Stream managedStream)
{
_bundleFilePath = bundleFilePath;
_packageBundle = packageBundle;
@@ -36,24 +39,24 @@ namespace YooAsset
}
}
- public FSLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
+ public BHLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
{
- var operation = new AssetBundleLoadAssetOperation(_packageBundle, _assetBundle, assetInfo);
+ var operation = new ABHLoadAssetOperation(_packageBundle, _assetBundle, assetInfo);
return operation;
}
- public FSLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
+ public BHLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
{
- var operation = new AssetBundleLoadAllAssetsOperation(_packageBundle, _assetBundle, assetInfo);
+ var operation = new ABHLoadAllAssetsOperation(_packageBundle, _assetBundle, assetInfo);
return operation;
}
- public FSLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
+ public BHLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
{
- var operation = new AssetBundleLoadSubAssetsOperation(_packageBundle, _assetBundle, assetInfo);
+ var operation = new ABHLoadSubAssetsOperation(_packageBundle, _assetBundle, assetInfo);
return operation;
}
- public FSLoadSceneOperation LoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
+ public BHLoadSceneOperation LoadSceneAsync(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad)
{
- var operation = new AssetBundleLoadSceneOperation(assetInfo, loadParams, suspendLoad);
+ var operation = new ABHLoadSceneOperation(assetInfo, loadSceneParams, suspendLoad);
return operation;
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/AssetBundleResult.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/AssetBundleHandle.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/AssetBundleResult.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/AssetBundleHandle.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAllAssetsOperation.cs
similarity index 78%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAllAssetsOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAllAssetsOperation.cs
index f62c369a..7ac974d9 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAllAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAllAssetsOperation.cs
@@ -1,8 +1,11 @@
-using UnityEngine;
+using UnityEngine;
namespace YooAsset
{
- internal class AssetBundleLoadAllAssetsOperation : FSLoadAllAssetsOperation
+ ///
+ /// AssetBundle的加载所有资源操作
+ ///
+ internal class ABHLoadAllAssetsOperation : BHLoadAllAssetsOperation
{
protected enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private AssetBundleRequest _request;
private ESteps _steps = ESteps.None;
- public AssetBundleLoadAllAssetsOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
+ public ABHLoadAllAssetsOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetBundle = assetBundle;
@@ -39,8 +42,8 @@ namespace YooAsset
if (_assetBundle == null)
{
_steps = ESteps.Done;
- Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to unity engine bugs.";
Status = EOperationStatus.Failed;
+ Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to Unity engine bugs.";
return;
}
@@ -71,10 +74,11 @@ namespace YooAsset
{
if (_request != null)
{
+ // 注意: 异步加载过程中,业务逻辑可能会强制转换为同步加载
if (IsWaitForCompletion)
{
// 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
+ YooLogger.Warning("Suspending the main thread to load Unity asset.");
Result = _request.allAssets;
}
else
@@ -90,14 +94,14 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load all assets : {_assetInfo.AssetPath} AssetType : null AssetBundle : {_packageBundle.BundleName}";
+ error = $"Failed to load all assets: {_assetInfo.AssetPath} AssetType: null AssetBundle: {_packageBundle.BundleName}";
else
- error = $"Failed to load all assets : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType} AssetBundle : {_packageBundle.BundleName}";
- YooLogger.Error(error);
-
+ error = $"Failed to load all assets: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType} AssetBundle: {_packageBundle.BundleName}";
+
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = error;
+ YooLogger.Error(error);
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAllAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAllAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAllAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAllAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAssetOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAssetOperation.cs
similarity index 79%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAssetOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAssetOperation.cs
index a57e686c..b0d6d467 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAssetOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAssetOperation.cs
@@ -1,8 +1,11 @@
-using UnityEngine;
+using UnityEngine;
namespace YooAsset
{
- internal class AssetBundleLoadAssetOperation : FSLoadAssetOperation
+ ///
+ /// AssetBundle的加载单个资源操作
+ ///
+ internal class ABHLoadAssetOperation : BHLoadAssetOperation
{
protected enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private AssetBundleRequest _request;
private ESteps _steps = ESteps.None;
- public AssetBundleLoadAssetOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
+ public ABHLoadAssetOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetBundle = assetBundle;
@@ -39,8 +42,8 @@ namespace YooAsset
if (_assetBundle == null)
{
_steps = ESteps.Done;
- Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to unity engine bugs.";
Status = EOperationStatus.Failed;
+ Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to Unity engine bugs.";
return;
}
@@ -71,10 +74,11 @@ namespace YooAsset
{
if (_request != null)
{
+ // 注意: 异步加载过程中,业务逻辑可能会强制转换为同步加载
if (IsWaitForCompletion)
{
// 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
+ YooLogger.Warning("Suspending the main thread to load Unity asset.");
Result = _request.asset;
}
else
@@ -90,9 +94,9 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load asset : {_assetInfo.AssetPath} AssetType : null AssetBundle : {_packageBundle.BundleName}";
+ error = $"Failed to load asset: {_assetInfo.AssetPath} AssetType: null AssetBundle: {_packageBundle.BundleName}";
else
- error = $"Failed to load asset : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType} AssetBundle : {_packageBundle.BundleName}";
+ error = $"Failed to load asset: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType} AssetBundle: {_packageBundle.BundleName}";
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAssetOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAssetOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadAssetOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadAssetOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSceneOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSceneOperation.cs
similarity index 78%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSceneOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSceneOperation.cs
index 994156d4..603077b5 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSceneOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSceneOperation.cs
@@ -1,9 +1,12 @@
-using UnityEngine;
+using UnityEngine;
using UnityEngine.SceneManagement;
namespace YooAsset
{
- internal class AssetBundleLoadSceneOperation : FSLoadSceneOperation
+ ///
+ /// AssetBundle的场景加载操作
+ ///
+ internal class ABHLoadSceneOperation : BHLoadSceneOperation
{
protected enum ESteps
{
@@ -14,15 +17,15 @@ namespace YooAsset
}
private readonly AssetInfo _assetInfo;
- private readonly LoadSceneParameters _loadParams;
+ private readonly LoadSceneParameters _loadSceneParams;
private bool _suspendLoad;
private AsyncOperation _asyncOperation;
private ESteps _steps = ESteps.None;
- public AssetBundleLoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
+ public ABHLoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad)
{
_assetInfo = assetInfo;
- _loadParams = loadParams;
+ _loadSceneParams = loadSceneParams;
_suspendLoad = suspendLoad;
}
internal override void InternalStart()
@@ -39,14 +42,14 @@ namespace YooAsset
if (IsWaitForCompletion)
{
// 注意:场景同步加载方法不会立即加载场景,而是在下一帧加载。
- Result = SceneManager.LoadScene(_assetInfo.AssetPath, _loadParams);
+ Result = SceneManager.LoadScene(_assetInfo.AssetPath, _loadSceneParams);
_steps = ESteps.CheckResult;
}
else
{
// 注意:如果场景不存在异步加载方法返回NULL
// 注意:即使是异步加载也要在当帧获取到场景对象
- _asyncOperation = SceneManager.LoadSceneAsync(_assetInfo.AssetPath, _loadParams);
+ _asyncOperation = SceneManager.LoadSceneAsync(_assetInfo.AssetPath, _loadSceneParams);
if (_asyncOperation != null)
{
_asyncOperation.allowSceneActivation = !_suspendLoad;
@@ -56,11 +59,10 @@ namespace YooAsset
}
else
{
- string error = $"Failed to load scene : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"Failed to load scene: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
}
}
}
@@ -71,8 +73,8 @@ namespace YooAsset
{
if (IsWaitForCompletion)
{
- //注意:场景加载无法强制异步转同步
- YooLogger.Error("The scene is loading asyn.");
+ // 注意:场景加载无法强制异步转同步
+ YooLogger.Error("The scene is already loading asynchronously.");
}
else
{
@@ -96,11 +98,10 @@ namespace YooAsset
}
else
{
- string error = $"The loaded scene is invalid : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"The loaded scene is invalid: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
}
}
}
@@ -109,7 +110,7 @@ namespace YooAsset
//注意:场景加载不支持异步转同步,为了支持同步加载方法需要实现该方法!
ExecuteOnce();
}
- public override void UnSuspendLoad()
+ public override void ResumeLoad()
{
_suspendLoad = false;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSceneOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSceneOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSceneOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSceneOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSubAssetsOperation.cs
similarity index 79%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSubAssetsOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSubAssetsOperation.cs
index 96b53336..8d814c30 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSubAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSubAssetsOperation.cs
@@ -1,8 +1,11 @@
-using UnityEngine;
+using UnityEngine;
namespace YooAsset
{
- internal class AssetBundleLoadSubAssetsOperation : FSLoadSubAssetsOperation
+ ///
+ /// AssetBundle的加载子资源操作
+ ///
+ internal class ABHLoadSubAssetsOperation : BHLoadSubAssetsOperation
{
protected enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private AssetBundleRequest _request;
private ESteps _steps = ESteps.None;
- public AssetBundleLoadSubAssetsOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
+ public ABHLoadSubAssetsOperation(PackageBundle packageBundle, AssetBundle assetBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetBundle = assetBundle;
@@ -39,8 +42,8 @@ namespace YooAsset
if (_assetBundle == null)
{
_steps = ESteps.Done;
- Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to unity engine bugs.";
Status = EOperationStatus.Failed;
+ Error = $"The bundle {_packageBundle.BundleName} has been destroyed due to Unity engine bugs.";
return;
}
@@ -71,10 +74,11 @@ namespace YooAsset
{
if (_request != null)
{
+ // 注意: 异步加载过程中,业务逻辑可能会强制转换为同步加载
if (IsWaitForCompletion)
{
// 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
+ YooLogger.Warning("Suspending the main thread to load Unity asset.");
Result = _request.allAssets;
}
else
@@ -90,14 +94,14 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load sub assets : {_assetInfo.AssetPath} AssetType : null AssetBundle : {_packageBundle.BundleName}";
+ error = $"Failed to load sub-assets: {_assetInfo.AssetPath} AssetType: null AssetBundle: {_packageBundle.BundleName}";
else
- error = $"Failed to load sub assets : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType} AssetBundle : {_packageBundle.BundleName}";
- YooLogger.Error(error);
+ error = $"Failed to load sub-assets: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType} AssetBundle: {_packageBundle.BundleName}";
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = error;
+ YooLogger.Error(error);
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSubAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSubAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/AssetBundleResult/Operations/AssetBundleLoadSubAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/AssetBundleHandle/Operations/ABHLoadSubAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle.meta
new file mode 100644
index 00000000..fda1c481
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: af833833252078e45866dd8e1e8299bb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle/Operations.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle/Operations.meta
new file mode 100644
index 00000000..dfcc506b
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/InstantBundleHandle/Operations.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c9e4bd9d00f3b2d4482c97519523474d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAllAssetsOperation.cs
new file mode 100644
index 00000000..d247b3ca
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAllAssetsOperation.cs
@@ -0,0 +1,18 @@
+
+namespace YooAsset
+{
+ ///
+ /// 原生资源包的加载所有资源操作(不支持)
+ ///
+ internal class RBHLoadAllAssetsOperation : BHLoadAllAssetsOperation
+ {
+ internal override void InternalStart()
+ {
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(RBHLoadAllAssetsOperation)} does not support loading all assets.";
+ }
+ internal override void InternalUpdate()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAllAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAllAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAllAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAllAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAssetOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAssetOperation.cs
similarity index 79%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAssetOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAssetOperation.cs
index 5fd81496..4540335c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAssetOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAssetOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class RawBundleLoadAssetOperation : FSLoadAssetOperation
+ ///
+ /// 原生资源包的加载单个资源操作
+ ///
+ internal class RBHLoadAssetOperation : BHLoadAssetOperation
{
protected enum ESteps
{
@@ -16,7 +19,7 @@ namespace YooAsset
private readonly AssetInfo _assetInfo;
private ESteps _steps = ESteps.None;
- public RawBundleLoadAssetOperation(PackageBundle packageBundle, RawBundle rawBundle, AssetInfo assetInfo)
+ public RBHLoadAssetOperation(PackageBundle packageBundle, RawBundle rawBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_rawBundle = rawBundle;
@@ -43,7 +46,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Failed to load raw file object : {_assetInfo.AssetPath}";
+ Error = $"Failed to load raw file object: {_assetInfo.AssetPath}";
YooLogger.Error(Error);
}
else
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAssetOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAssetOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAssetOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadAssetOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSceneOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSceneOperation.cs
new file mode 100644
index 00000000..c9f15904
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSceneOperation.cs
@@ -0,0 +1,21 @@
+
+namespace YooAsset
+{
+ ///
+ /// 原生资源包的场景加载操作(不支持)
+ ///
+ internal class RBHLoadSceneOperation : BHLoadSceneOperation
+ {
+ internal override void InternalStart()
+ {
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(RBHLoadSceneOperation)} does not support loading scene.";
+ }
+ internal override void InternalUpdate()
+ {
+ }
+ public override void ResumeLoad()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSceneOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSceneOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSceneOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSceneOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSubAssetsOperation.cs
new file mode 100644
index 00000000..a859fc8a
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSubAssetsOperation.cs
@@ -0,0 +1,18 @@
+
+namespace YooAsset
+{
+ ///
+ /// 原生资源包的加载子资源操作(不支持)
+ ///
+ internal class RBHLoadSubAssetsOperation : BHLoadSubAssetsOperation
+ {
+ internal override void InternalStart()
+ {
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(RBHLoadSubAssetsOperation)} does not support loading sub-assets.";
+ }
+ internal override void InternalUpdate()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSubAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSubAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSubAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/Operations/RBHLoadSubAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundle.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundle.cs
similarity index 75%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundle.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundle.cs
index 216f7f04..338f39da 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundle.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundle.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 原生资源包
+ ///
public class RawBundle
{
private byte[] _data;
@@ -18,6 +21,9 @@ namespace YooAsset
return RawFileObject.Create(_data);
}
+ ///
+ /// 卸载原生资源包数据
+ ///
public void Unload()
{
_data = null;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundle.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundle.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundle.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundle.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundleResult.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundleHandle.cs
similarity index 51%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundleResult.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundleHandle.cs
index e4728beb..19de445d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundleResult.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundleHandle.cs
@@ -1,14 +1,17 @@
-using UnityEngine.SceneManagement;
+using UnityEngine.SceneManagement;
namespace YooAsset
{
- internal class RawBundleResult : IBundleResult
+ ///
+ /// 原生资源包句柄
+ ///
+ internal class RawBundleHandle : IBundleHandle
{
private readonly string _bundleFilePath;
private readonly PackageBundle _packageBundle;
private readonly RawBundle _rawBundle;
- public RawBundleResult(string bundleFilePath, PackageBundle packageBundle, RawBundle rawBundle)
+ public RawBundleHandle(string bundleFilePath, PackageBundle packageBundle, RawBundle rawBundle)
{
_bundleFilePath = bundleFilePath;
_packageBundle = packageBundle;
@@ -26,24 +29,24 @@ namespace YooAsset
}
}
- public FSLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
+ public BHLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
{
- var operation = new RawBundleLoadAssetOperation(_packageBundle, _rawBundle, assetInfo);
+ var operation = new RBHLoadAssetOperation(_packageBundle, _rawBundle, assetInfo);
return operation;
}
- public FSLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
+ public BHLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
{
- var operation = new RawBundleLoadAllAssetsOperation();
+ var operation = new RBHLoadAllAssetsOperation();
return operation;
}
- public FSLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
+ public BHLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
{
- var operation = new RawBundleLoadSubAssetsOperation();
+ var operation = new RBHLoadSubAssetsOperation();
return operation;
}
- public FSLoadSceneOperation LoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
+ public BHLoadSceneOperation LoadSceneAsync(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad)
{
- var operation = new RawBundleLoadSceneOperation();
+ var operation = new RBHLoadSceneOperation();
return operation;
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundleResult.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundleHandle.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawBundleResult.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawBundleHandle.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawFileObject.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawFileObject.cs
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawFileObject.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawFileObject.cs
index c106f7eb..3fc8637f 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawFileObject.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawFileObject.cs
@@ -11,8 +11,14 @@ namespace YooAsset
private byte[] _fileData;
private string _fileText;
+ ///
+ /// 原生文件的二进制数据
+ ///
public byte[] Data => _fileData;
+ ///
+ /// 原生文件的UTF-8文本内容
+ ///
public string Text
{
get
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawFileObject.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawFileObject.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/RawFileObject.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/RawBundleHandle/RawFileObject.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAllAssetsOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs
index 616f7fa9..7174a47c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAllAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs
@@ -1,8 +1,11 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace YooAsset
{
- internal class VirtualBundleLoadAllAssetsOperation : FSLoadAllAssetsOperation
+ ///
+ /// 虚拟资源包的加载所有资源操作
+ ///
+ internal class VBHLoadAllAssetsOperation : BHLoadAllAssetsOperation
{
protected enum ESteps
{
@@ -17,7 +20,7 @@ namespace YooAsset
private readonly AssetInfo _assetInfo;
private ESteps _steps = ESteps.None;
- public VirtualBundleLoadAllAssetsOperation(PackageBundle packageBundle, AssetInfo assetInfo)
+ public VBHLoadAllAssetsOperation(PackageBundle packageBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetInfo = assetInfo;
@@ -28,8 +31,8 @@ namespace YooAsset
_steps = ESteps.CheckBundle;
#else
_steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
Error = $"{nameof(VirtualBundleLoadAllAssetsOperation)} only support unity editor platform.";
- Status = EOperationStatus.Failed;
#endif
}
internal override void InternalUpdate()
@@ -44,11 +47,10 @@ namespace YooAsset
string guid = UnityEditor.AssetDatabase.AssetPathToGUID(_assetInfo.AssetPath);
if (string.IsNullOrEmpty(guid))
{
- string error = $"Not found asset : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"Asset not found: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
return;
}
@@ -90,14 +92,14 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load all assets : {_assetInfo.AssetPath} AssetType : null";
+ error = $"Failed to load all assets: {_assetInfo.AssetPath} AssetType: null";
else
- error = $"Failed to load all assets : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType}";
- YooLogger.Error(error);
+ error = $"Failed to load all assets: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType}";
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = error;
+ YooLogger.Error(error);
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAllAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAllAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAssetOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs
similarity index 79%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAssetOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs
index 36a03589..00d181dc 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAssetOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class VirtualBundleLoadAssetOperation : FSLoadAssetOperation
+ ///
+ /// 虚拟资源包的加载单个资源操作
+ ///
+ internal class VBHLoadAssetOperation : BHLoadAssetOperation
{
protected enum ESteps
{
@@ -16,7 +19,7 @@ namespace YooAsset
private readonly AssetInfo _assetInfo;
private ESteps _steps = ESteps.None;
- public VirtualBundleLoadAssetOperation(PackageBundle packageBundle, AssetInfo assetInfo)
+ public VBHLoadAssetOperation(PackageBundle packageBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetInfo = assetInfo;
@@ -27,8 +30,8 @@ namespace YooAsset
_steps = ESteps.CheckBundle;
#else
_steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
Error = $"{nameof(VirtualBundleLoadAssetOperation)} only support unity editor platform.";
- Status = EOperationStatus.Failed;
#endif
}
internal override void InternalUpdate()
@@ -43,11 +46,10 @@ namespace YooAsset
string guid = UnityEditor.AssetDatabase.AssetPathToGUID(_assetInfo.AssetPath);
if (string.IsNullOrEmpty(guid))
{
- string error = $"Not found asset : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"Asset not found: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
return;
}
@@ -69,14 +71,14 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load asset object : {_assetInfo.AssetPath} AssetType : null";
+ error = $"Failed to load asset object: {_assetInfo.AssetPath} AssetType: null";
else
- error = $"Failed to load asset object : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType}";
- YooLogger.Error(error);
+ error = $"Failed to load asset object: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType}";
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = error;
+ YooLogger.Error(error);
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAssetOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadAssetOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSceneOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSceneOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs
index 21ddc4ff..66e0bd54 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSceneOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs
@@ -1,9 +1,12 @@
-using UnityEngine;
+using UnityEngine;
using UnityEngine.SceneManagement;
namespace YooAsset
{
- internal class VirtualBundleLoadSceneOperation : FSLoadSceneOperation
+ ///
+ /// 虚拟资源包的场景加载操作
+ ///
+ internal class VBHLoadSceneOperation : BHLoadSceneOperation
{
protected enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private AsyncOperation _asyncOperation;
private ESteps _steps = ESteps.None;
- public VirtualBundleLoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
+ public VBHLoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
{
_assetInfo = assetInfo;
_loadParams = loadParams;
@@ -31,8 +34,8 @@ namespace YooAsset
_steps = ESteps.LoadScene;
#else
_steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
Error = $"{nameof(VirtualBundleLoadSceneOperation)} only support unity editor platform.";
- Status = EOperationStatus.Failed;
#endif
}
internal override void InternalUpdate()
@@ -60,11 +63,10 @@ namespace YooAsset
}
else
{
- string error = $"Failed to load scene : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"Failed to load scene: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
return;
}
}
@@ -77,7 +79,7 @@ namespace YooAsset
if (IsWaitForCompletion)
{
// 注意:场景加载无法强制异步转同步
- YooLogger.Error("The scene is loading asyn.");
+ YooLogger.Error("The scene is already loading asynchronously.");
}
else
{
@@ -101,11 +103,10 @@ namespace YooAsset
}
else
{
- string error = $"The loaded scene is invalid : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"The loaded scene is invalid: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
}
}
#endif
@@ -115,7 +116,7 @@ namespace YooAsset
//注意:场景加载不支持异步转同步,为了支持同步加载方法需要实现该方法!
ExecuteOnce();
}
- public override void UnSuspendLoad()
+ public override void ResumeLoad()
{
_suspendLoad = false;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSceneOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSceneOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs
similarity index 81%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSubAssetsOperation.cs
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs
index 87c1c2cf..80fe3f92 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSubAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs
@@ -1,8 +1,11 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace YooAsset
{
- internal class VirtualBundleLoadSubAssetsOperation : FSLoadSubAssetsOperation
+ ///
+ /// 虚拟资源包的加载子资源操作
+ ///
+ internal class VBHLoadSubAssetsOperation : BHLoadSubAssetsOperation
{
protected enum ESteps
{
@@ -17,7 +20,7 @@ namespace YooAsset
private readonly AssetInfo _assetInfo;
private ESteps _steps = ESteps.None;
- public VirtualBundleLoadSubAssetsOperation(PackageBundle packageBundle, AssetInfo assetInfo)
+ public VBHLoadSubAssetsOperation(PackageBundle packageBundle, AssetInfo assetInfo)
{
_packageBundle = packageBundle;
_assetInfo = assetInfo;
@@ -28,8 +31,8 @@ namespace YooAsset
_steps = ESteps.CheckBundle;
#else
_steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
Error = $"{nameof(VirtualBundleLoadSubAssetsOperation)} only support unity editor platform.";
- Status = EOperationStatus.Failed;
#endif
}
internal override void InternalUpdate()
@@ -44,11 +47,10 @@ namespace YooAsset
string guid = UnityEditor.AssetDatabase.AssetPathToGUID(_assetInfo.AssetPath);
if (string.IsNullOrEmpty(guid))
{
- string error = $"Not found asset : {_assetInfo.AssetPath}";
- YooLogger.Error(error);
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = $"Asset not found: {_assetInfo.AssetPath}";
+ YooLogger.Error(Error);
return;
}
@@ -81,14 +83,14 @@ namespace YooAsset
{
string error;
if (_assetInfo.AssetType == null)
- error = $"Failed to load sub assets : {_assetInfo.AssetPath} AssetType : null";
+ error = $"Failed to load sub-assets: {_assetInfo.AssetPath} AssetType: null";
else
- error = $"Failed to load sub assets : {_assetInfo.AssetPath} AssetType : {_assetInfo.AssetType}";
- YooLogger.Error(error);
+ error = $"Failed to load sub-assets: {_assetInfo.AssetPath} AssetType: {_assetInfo.AssetType}";
_steps = ESteps.Done;
- Error = error;
Status = EOperationStatus.Failed;
+ Error = error;
+ YooLogger.Error(error);
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSubAssetsOperation.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/Operations/VirtualBundleLoadSubAssetsOperation.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/VirtualBundleHandle.cs b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/VirtualBundleHandle.cs
new file mode 100644
index 00000000..4cb81d91
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/VirtualBundleHandle.cs
@@ -0,0 +1,47 @@
+using UnityEngine.SceneManagement;
+
+namespace YooAsset
+{
+ ///
+ /// 虚拟资源包句柄
+ ///
+ internal class VirtualBundleHandle : IBundleHandle
+ {
+ private readonly string _bundleFilePath;
+ private readonly PackageBundle _packageBundle;
+
+ public VirtualBundleHandle(string bundleFilePath, PackageBundle bundle)
+ {
+ _bundleFilePath = bundleFilePath;
+ _packageBundle = bundle;
+ }
+ public void UnloadBundleFile()
+ {
+ }
+ public string GetBundleFilePath()
+ {
+ return _bundleFilePath;
+ }
+
+ public BHLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
+ {
+ var operation = new VBHLoadAssetOperation(_packageBundle, assetInfo);
+ return operation;
+ }
+ public BHLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
+ {
+ var operation = new VBHLoadAllAssetsOperation(_packageBundle, assetInfo);
+ return operation;
+ }
+ public BHLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
+ {
+ var operation = new VBHLoadSubAssetsOperation(_packageBundle, assetInfo);
+ return operation;
+ }
+ public BHLoadSceneOperation LoadSceneAsync(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad)
+ {
+ var operation = new VBHLoadSceneOperation(assetInfo, loadSceneParams, suspendLoad);
+ return operation;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/VirtualBundleResult.cs.meta b/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/VirtualBundleHandle.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/VirtualBundleResult.cs.meta
rename to Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle/VirtualBundleHandle.cs.meta
diff --git a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticBehaviour.cs b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticBehaviour.cs
index a7d23349..15f3c713 100644
--- a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticBehaviour.cs
+++ b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticBehaviour.cs
@@ -31,7 +31,7 @@ namespace YooAsset
private void OnEnable()
{
#if UNITY_EDITOR
- MockPlayerConnection.Instance.Register(DiagnosticSystemDefine.EditorToPlayerMessageId, HandleEditorMessage);
+ MockPlayerConnection.Instance.Register(DiagnosticSystemConsts.EditorToPlayerMessageId, HandleEditorMessage);
#else
PlayerConnection.instance.Register(DiagnosticSystemDefine.EditorToPlayerMessageId, HandleEditorMessage);
#endif
@@ -39,7 +39,7 @@ namespace YooAsset
private void OnDisable()
{
#if UNITY_EDITOR
- MockPlayerConnection.Instance.Unregister(DiagnosticSystemDefine.EditorToPlayerMessageId, HandleEditorMessage);
+ MockPlayerConnection.Instance.Unregister(DiagnosticSystemConsts.EditorToPlayerMessageId, HandleEditorMessage);
#else
PlayerConnection.instance.Unregister(DiagnosticSystemDefine.EditorToPlayerMessageId, HandleEditorMessage);
#endif
@@ -53,7 +53,7 @@ namespace YooAsset
var data = DiagnosticReport.Serialize(debugReport);
#if UNITY_EDITOR
- MockPlayerConnection.Instance.Send(DiagnosticSystemDefine.PlayerToEditorMessageId, data);
+ MockPlayerConnection.Instance.Send(DiagnosticSystemConsts.PlayerToEditorMessageId, data);
#else
PlayerConnection.instance.Send(DiagnosticSystemDefine.PlayerToEditorMessageId, data);
#endif
diff --git a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticReport/DiagnosticReport.cs b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticReport/DiagnosticReport.cs
index 1c545842..17c0f343 100644
--- a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticReport/DiagnosticReport.cs
+++ b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticReport/DiagnosticReport.cs
@@ -34,7 +34,7 @@ namespace YooAsset
public static DiagnosticReport Create()
{
var report = new DiagnosticReport();
- report.ProtocolVersion = DiagnosticSystemDefine.ProtocolVersion;
+ report.ProtocolVersion = DiagnosticSystemConsts.ProtocolVersion;
report.FrameCount = Time.frameCount;
return report;
}
diff --git a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemDefine.cs b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemConsts.cs
similarity index 94%
rename from Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemDefine.cs
rename to Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemConsts.cs
index 6e52e147..00831632 100644
--- a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemDefine.cs
+++ b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemConsts.cs
@@ -5,7 +5,7 @@ namespace YooAsset
///
/// 诊断系统的常量定义
///
- internal class DiagnosticSystemDefine
+ internal class DiagnosticSystemConsts
{
///
/// 通信协议版本号
diff --git a/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemDefine.cs.meta b/Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemDefine.cs.meta
rename to Assets/YooAsset/Runtime/DiagnosticSystem/DiagnosticSystemConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs b/Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs
deleted file mode 100644
index 8031d8bf..00000000
--- a/Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System.Collections.Generic;
-
-namespace YooAsset
-{
- ///
- /// 网络请求失败计数器(诊断用)
- ///
- ///
- /// 线程安全:内部使用 Dictionary 且未加锁,约定只在 Unity 主线程调用。
- /// 如需在多线程/回调线程调用,请在外层加锁或改为并发容器实现。
- ///
- internal class DownloadFailureCounter
- {
-#if UNITY_EDITOR
- [UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.SubsystemRegistration)]
- private static void OnRuntimeInitialize()
- {
- _failureRecords.Clear();
- }
-#endif
-
- ///
- /// 失败计数记录表
- ///
- ///
- /// Key 格式:$"{packageName}_{eventName}"
- ///
- private static readonly Dictionary _failureRecords = new Dictionary(1000);
-
- ///
- /// 记录一次失败
- ///
- /// 资源包名称
- /// 事件名称
- public static void RecordFailure(string packageName, string eventName)
- {
- string key = $"{packageName}_{eventName}";
- if (_failureRecords.ContainsKey(key) == false)
- _failureRecords.Add(key, 0);
- _failureRecords[key]++;
- }
-
- ///
- /// 获取失败次数
- ///
- /// 资源包名称
- /// 事件名称
- /// 失败次数,如果未记录过则返回 0
- public static int GetFailureCount(string packageName, string eventName)
- {
- string key = $"{packageName}_{eventName}";
- if (_failureRecords.TryGetValue(key, out int count))
- return count;
- return 0;
- }
- }
-}
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/DownloadReport.cs b/Assets/YooAsset/Runtime/DownloadSystem/DownloadReport.cs
new file mode 100644
index 00000000..c422b721
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/DownloadReport.cs
@@ -0,0 +1,38 @@
+
+namespace YooAsset
+{
+ public struct DownloadReport
+ {
+ ///
+ /// HTTP 返回码
+ ///
+ public long HttpCode { get; set; }
+
+ ///
+ /// HTTP 错误信息
+ ///
+ public string HttpError { get; set; }
+
+ ///
+ /// 当前下载的字节数
+ ///
+ public long DownloadedBytes { get; set; }
+
+ ///
+ /// 当前下载进度(0f - 1f)
+ ///
+ public float DownloadProgress { get; set; }
+
+ ///
+ /// 创建默认的下载进度实例
+ ///
+ public static DownloadReport Default
+ {
+ get
+ {
+ var result = new DownloadReport();
+ return result;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/DownloadStatus.cs.meta b/Assets/YooAsset/Runtime/DownloadSystem/DownloadReport.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourceManager/DownloadStatus.cs.meta
rename to Assets/YooAsset/Runtime/DownloadSystem/DownloadReport.cs.meta
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs b/Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs
new file mode 100644
index 00000000..cecd124e
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs
@@ -0,0 +1,93 @@
+using UnityEngine;
+
+namespace YooAsset
+{
+ ///
+ /// 下载重试控制器
+ ///
+ internal sealed class DownloadRetry
+ {
+ private readonly int _maxRetryCount;
+ private readonly IDownloadRetryPolicy _retryPolicy;
+ private int _retryCount;
+ private float _waitTimer;
+ private float _waitDuration;
+
+ ///
+ /// 已重试次数
+ ///
+ public int RetryCount => _retryCount;
+
+ ///
+ /// 当前等待目标时长(秒)
+ ///
+ public float WaitDuration => _waitDuration;
+
+ ///
+ /// 创建下载重试控制器
+ ///
+ /// 最大重试次数
+ /// 重试策略
+ public DownloadRetry(int maxRetryCount, IDownloadRetryPolicy retryPolicy)
+ {
+ _maxRetryCount = maxRetryCount;
+ _retryPolicy = retryPolicy;
+ _retryCount = 0;
+ _waitTimer = 0f;
+ _waitDuration = 0f;
+ }
+
+ ///
+ /// 判断本次失败是否允许重试
+ ///
+ /// 请求地址
+ /// HTTP 状态码
+ /// HTTP 错误信息
+ ///
+ /// 返回 true 表示允许重试;调用方应紧接着调用 BeginWait() 启动等待。
+ /// 返回 false 表示不允许重试(达到次数上限或错误不可重试)。
+ ///
+ public bool CanRetry(string url, long httpCode, string httpError)
+ {
+ if (_retryCount >= _maxRetryCount)
+ return false;
+
+ if (_retryPolicy.IsRetryableError(url, httpCode, httpError) == false)
+ return false;
+
+ YooLogger.Warning($"Download failed: {url}. HttpCode={httpCode}");
+ return true;
+ }
+
+ ///
+ /// 判断是否可以进入网络重试
+ ///
+ public bool CanRetry()
+ {
+ if (_retryCount >= _maxRetryCount)
+ return false;
+
+ return true;
+ }
+
+ ///
+ /// 开始本次重试等待
+ ///
+ public void BeginWait()
+ {
+ _waitTimer = 0f;
+ _retryCount++;
+ _waitDuration = _retryPolicy.ComputeDelay(_retryCount, _waitDuration);
+ YooLogger.Warning($"Download retrying in {WaitDuration:F1}s.");
+ }
+
+ ///
+ /// 推进等待计时
+ ///
+ public bool Tick()
+ {
+ _waitTimer += Time.unscaledDeltaTime;
+ return _waitTimer >= _waitDuration;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs.meta b/Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs.meta
rename to Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs.meta
index 394f817d..d636a5b8 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/DownloadFailureCounter.cs.meta
+++ b/Assets/YooAsset/Runtime/DownloadSystem/DownloadRetry.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: ca9b2c6456d21bb4e9eecd9dc820a641
+guid: 37c93b71779bcdf4da4005128e2cc6b8
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Interfaces/IDownloadRequest.cs b/Assets/YooAsset/Runtime/DownloadSystem/Interfaces/IDownloadRequest.cs
index 0e13b847..dbaef0b0 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/Interfaces/IDownloadRequest.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Interfaces/IDownloadRequest.cs
@@ -42,10 +42,15 @@ namespace YooAsset
/// HTTP 返回码
///
///
- /// 非 HTTP 协议可返回 0。使用 long 类型以兼容各种协议的返回码。
+ /// 非 HTTP 协议可返回 0
///
long HttpCode { get; }
+ ///
+ /// HTTP 错误信息
+ ///
+ string HttpError { get; }
+
///
/// 错误信息
///
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadFileBaseOperation.cs b/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadFileBaseOperation.cs
index 18fd6595..e96b0dad 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadFileBaseOperation.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadFileBaseOperation.cs
@@ -1,4 +1,4 @@
-
+
namespace YooAsset
{
internal abstract class DownloadFileBaseOperation : AsyncOperationBase
@@ -13,21 +13,16 @@ namespace YooAsset
///
public readonly string Url;
- ///
- /// 下载进度
- ///
- public float DownloadProgress { get; protected set; }
-
- ///
- /// 下载字节
- ///
- public long DownloadedBytes { get; protected set; }
-
///
/// 引用计数
///
public int RefCount { private set; get; }
+ ///
+ /// 下载报告
+ ///
+ public DownloadReport Report;
+
public DownloadFileBaseOperation(PackageBundle bundle, string url)
{
Bundle = bundle;
@@ -35,7 +30,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"RefCount : {RefCount}";
+ return $"RefCount: {RefCount}";
}
///
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadSchedulerOperation.cs b/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadSchedulerOperation.cs
index 7680a16d..82a8272e 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadSchedulerOperation.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Operations/DownloadSchedulerOperation.cs
@@ -9,7 +9,7 @@ namespace YooAsset
///
/// 管理所有活跃的下载任务,控制并发数量。
///
- internal class DownloadSchedulerOperation : AsyncOperationBase, IDisposable
+ internal class DownloadSchedulerOperation : AsyncOperationBase
{
public struct SchedulerConfig
{
@@ -44,9 +44,6 @@ namespace YooAsset
}
}
- ///
- /// 构造下载中心
- ///
public DownloadSchedulerOperation(SchedulerConfig config)
{
_config = config;
@@ -125,19 +122,6 @@ namespace YooAsset
return _config.SchedulerName;
}
- ///
- /// 释放下载资源
- ///
- public void Dispose()
- {
- foreach (var valuePair in _downloaders)
- {
- var operation = valuePair.Value;
- operation.AbortOperation();
- }
- _downloaders.Clear();
- }
-
///
/// 尝试获取已经存在的下载器
///
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy.meta b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy.meta
new file mode 100644
index 00000000..b4a1ff2a
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4446775dfbf483f46a5edc74890a8245
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs
new file mode 100644
index 00000000..fae5dccc
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+
+namespace YooAsset
+{
+ ///
+ /// 默认的下载重试策略
+ ///
+ public class DefaultDownloadRetryPolicy : IDownloadRetryPolicy
+ {
+ private const float BaseDelay = 1f;
+ private const float MaxDelay = 10f;
+
+ ///
+ /// 判断本次下载失败是否属于可重试的错误
+ ///
+ public bool IsRetryableError(string url, long httpCode, string httpError)
+ {
+ // HTTP 状态码
+ // 1xx 信息响应
+ // 2xx 成功响应
+ // 3xx 重定向消息
+ // 4xx 客户端错误响应
+ // 5xx 服务器错误响应
+
+ // 本地协议/本地路径不可重试
+ if (DownloadSystemTools.IsLocalFileUrl(url))
+ return false;
+
+ // 网络瞬断可重试
+ if (httpCode == 0)
+ return true;
+
+ // 4xx 客户端错误不可重试
+ // 例外:408 Request Timeout
+ // 例外:416 Range Not Satisfiable
+ // 例外:429 Too Many Requests
+ if (httpCode >= 400 && httpCode < 500)
+ return httpCode == 408 || httpCode == 416 || httpCode == 429;
+
+ // 其它情况可重试
+ return true;
+ }
+
+ ///
+ /// 计算本次重试应等待的时长(秒)
+ /// 线性退避:每次在上一次基础上 +1 秒,封顶到最大等待秒数。
+ ///
+ public float ComputeDelay(int retryCount, float previousDelay)
+ {
+ return Mathf.Clamp(previousDelay + 1f, BaseDelay, MaxDelay);
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs.meta b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs.meta
new file mode 100644
index 00000000..3762e19d
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadRetryPolicy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2a84bce9bf9030645b7241a581a05af6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs
new file mode 100644
index 00000000..d0bc8817
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+
+namespace YooAsset
+{
+ ///
+ /// 默认的 URL 选择策略
+ ///
+ public class DefaultDownloadURLPolicy : IDownloadURLPolicy
+ {
+ private int _failureCount = 0;
+
+ ///
+ /// 基于内部失败计数轮转选择 URL
+ ///
+ public string SelectURL(IReadOnlyList candidateURLs)
+ {
+ int index = _failureCount % candidateURLs.Count;
+ return candidateURLs[index];
+ }
+
+ ///
+ /// 请求成功反馈(默认策略不做处理)
+ ///
+ public void OnSuccess(string url)
+ {
+ }
+
+ ///
+ /// 请求失败反馈,递增失败计数以切换 URL
+ ///
+ public void OnFailure(string url, long httpCode, string httpError)
+ {
+ _failureCount++;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs.meta b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs.meta
new file mode 100644
index 00000000..c3a7b6a4
--- /dev/null
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/DownloadPolicy/DefaultDownloadURLPolicy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 747ba5d3c490c8043b61bbef89fd049c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/SimulatedFileRequest.cs b/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/SimulatedFileRequest.cs
index 5842e8ce..fb09c347 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/SimulatedFileRequest.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/SimulatedFileRequest.cs
@@ -69,6 +69,11 @@ namespace YooAsset
///
public long HttpCode { get; private set; }
+ ///
+ /// HTTP 错误信息
+ ///
+ public string HttpError { get; private set; }
+
///
/// 错误信息
///
diff --git a/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/UnityWebRequestBase.cs b/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/UnityWebRequestBase.cs
index 8946c5ea..4abeda97 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/UnityWebRequestBase.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/Services/UnityWebRequest/UnityWebRequestBase.cs
@@ -86,6 +86,11 @@ namespace YooAsset
///
public long HttpCode { get; private set; }
+ ///
+ /// HTTP 错误信息
+ ///
+ public string HttpError { get; private set; }
+
///
/// 错误信息
///
@@ -255,6 +260,8 @@ namespace YooAsset
return;
HttpCode = _webRequest.responseCode;
+ HttpError = _webRequest.error;
+
#if UNITY_2020_3_OR_NEWER
bool isSuccess = _webRequest.result == UnityWebRequest.Result.Success;
#else
@@ -269,7 +276,7 @@ namespace YooAsset
else
{
Status = EDownloadRequestStatus.Failed;
- Error = $"[{GetType().Name}] Request failed. URL: {Url}, Error: {_webRequest.error}";
+ Error = $"[{GetType().Name}] Request failed. URL: {Url}, HttpCode={HttpCode} HttpError={HttpError}";
OnRequestFailed();
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Interfaces/IFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Interfaces/IFileCache.cs
index 607ef613..72748b67 100644
--- a/Assets/YooAsset/Runtime/FileCache/Interfaces/IFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Interfaces/IFileCache.cs
@@ -47,7 +47,7 @@ namespace YooAsset
///
/// 清理缓存文件
///
- FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options);
+ FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options);
///
/// 验证缓存文件
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalAssetBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalAssetBundleOperation.cs
index 3760568d..1e3b86cc 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalAssetBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalAssetBundleOperation.cs
@@ -1,4 +1,4 @@
-using System.IO;
+using System.IO;
using UnityEngine;
namespace YooAsset
@@ -74,7 +74,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"{_options.CacheName} not support {decryptor.GetType().Name}";
+ Error = $"{_options.CacheName} does not support {decryptor.GetType().Name}";
return;
}
@@ -94,6 +94,7 @@ namespace YooAsset
{
if (_createRequest != null)
{
+ // 注意: 异步加载过程中,业务逻辑可能会强制转换为同步加载
if (IsWaitForCompletion)
{
// 强制挂起主线程(注意:该操作会很耗时)
@@ -120,7 +121,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = new AssetBundleResult(_options.FilePath, _options.Bundle, _assetBundle, _loadStream);
+ BundleHandle = new AssetBundleHandle(_options.FilePath, _options.Bundle, _assetBundle, _loadStream);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalRawBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalRawBundleOperation.cs
index 956b5485..ba0f8a5e 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalRawBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadLocalRawBundleOperation.cs
@@ -37,11 +37,11 @@ namespace YooAsset
{
if (_options.Bundle.IsEncrypted == false)
{
- if (SupportsFileIO(_options.FilePath) == false)
+ if (FileUtility.SupportsFileIO(_options.FilePath) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"FileIO not supported for builtin path : {_options.FilePath}";
+ Error = $"FileIO is not supported for builtin path: {_options.FilePath}";
return;
}
@@ -67,7 +67,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"{_options.CacheName} not support {decryptor.GetType().Name}";
+ Error = $"{_options.CacheName} does not support {decryptor.GetType().Name}";
return;
}
@@ -95,7 +95,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = new RawBundleResult(_options.FilePath, _options.Bundle, _rawBundle);
+ BundleHandle = new RawBundleHandle(_options.FilePath, _options.Bundle, _rawBundle);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOperation.cs
index 9590b26c..2ad97daa 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOperation.cs
@@ -1,4 +1,4 @@
-using UnityEngine;
+using UnityEngine;
namespace YooAsset
{
@@ -24,18 +24,16 @@ namespace YooAsset
}
protected readonly LoadWebAssetBundleOptions _options;
+ private readonly DownloadRetry _downloadRetry;
private IDownloadAssetBundleRequest _downloadAssetBundleRequest;
private ESteps _steps = ESteps.None;
- // 失败重试
- private int _requestCount = 0;
- private float _tryAgainTimer = 0;
- private int _failedTryAgain;
-
public LoadWebNormalAssetBundleOperation(LoadWebAssetBundleOptions options)
{
_options = options;
- _failedTryAgain = int.MaxValue; //注意:网络原因失败后,重新尝试直到成功
+
+ // 注意:网络原因失败后,重新尝试直到成功
+ _downloadRetry = new DownloadRetry(int.MaxValue, options.RetryPolicy);
}
internal override void InternalStart()
{
@@ -63,6 +61,7 @@ namespace YooAsset
if (_downloadAssetBundleRequest.Status == EDownloadRequestStatus.Succeeded)
{
+ _options.URLPolicy.OnSuccess(_downloadAssetBundleRequest.Url);
var assetBundle = _downloadAssetBundleRequest.Result;
if (assetBundle == null)
{
@@ -74,13 +73,18 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = new AssetBundleResult(_downloadAssetBundleRequest.Url, _options.Bundle, assetBundle, null);
+ BundleHandle = new AssetBundleHandle(_downloadAssetBundleRequest.Url, _options.Bundle, assetBundle, null);
}
}
else
{
- if (_failedTryAgain > 0 && IsRetryableError(_downloadAssetBundleRequest.HttpCode))
+ string url = _downloadAssetBundleRequest.Url;
+ long httpCode = _downloadAssetBundleRequest.HttpCode;
+ string httpError = _downloadAssetBundleRequest.HttpError;
+ _options.URLPolicy.OnFailure(url, httpCode, httpError);
+ if (IsWaitForCompletion == false && _downloadRetry.CanRetry(url, httpCode, httpError))
{
+ _downloadRetry.BeginWait();
_steps = ESteps.TryAgain;
}
else
@@ -101,11 +105,8 @@ namespace YooAsset
_downloadAssetBundleRequest = null;
}
- _tryAgainTimer += UnityEngine.Time.unscaledDeltaTime;
- if (_tryAgainTimer > 1f)
+ if (_downloadRetry.Tick())
{
- _tryAgainTimer = 0f;
- _failedTryAgain--;
Progress = 0f;
_steps = ESteps.BundleRequest;
}
@@ -122,12 +123,7 @@ namespace YooAsset
private string GetRequestURL()
{
- // 轮流返回请求地址
- _requestCount++;
- if (_requestCount % 2 == 0)
- return _options.FallbackURL;
- else
- return _options.MainURL;
+ return _options.URLPolicy.SelectURL(_options.CandidateURLs);
}
}
@@ -149,20 +145,18 @@ namespace YooAsset
}
protected readonly LoadWebAssetBundleOptions _options;
+ private readonly DownloadRetry _downloadRetry;
private IDownloadBytesRequest _downloadBytesRequest;
private IBundleMemoryDecryptor _decryptor;
private AssetBundleCreateRequest _createRequest;
private ESteps _steps = ESteps.None;
- // 失败重试
- private int _requestCount = 0;
- private float _tryAgainTimer = 0;
- private int _failedTryAgain;
-
public LoadWebEncryptedAssetBundleOperation(LoadWebAssetBundleOptions options)
{
_options = options;
- _failedTryAgain = int.MaxValue; //注意:网络原因失败后,重新尝试直到成功
+
+ // 注意:网络原因失败后,重新尝试直到成功
+ _downloadRetry = new DownloadRetry(int.MaxValue, options.RetryPolicy);
}
internal override void InternalStart()
{
@@ -197,7 +191,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"{_options.CacheName} not support {decryptor.GetType().Name}";
+ Error = $"{_options.CacheName} does not support {decryptor.GetType().Name}";
return;
}
}
@@ -210,12 +204,18 @@ namespace YooAsset
if (_downloadBytesRequest.Status == EDownloadRequestStatus.Succeeded)
{
+ _options.URLPolicy.OnSuccess(_downloadBytesRequest.Url);
_steps = ESteps.VerifyData;
}
else
{
- if (_failedTryAgain > 0 && IsRetryableError(_downloadBytesRequest.HttpCode))
+ string url = _downloadBytesRequest.Url;
+ long httpCode = _downloadBytesRequest.HttpCode;
+ string httpError = _downloadBytesRequest.HttpError;
+ _options.URLPolicy.OnFailure(url, httpCode, httpError);
+ if (IsWaitForCompletion == false && _downloadRetry.CanRetry(url, httpCode, httpError))
{
+ _downloadRetry.BeginWait();
_steps = ESteps.TryAgain;
}
else
@@ -247,8 +247,9 @@ namespace YooAsset
string error = $"[WebBundleVerify] Verify failed. Url:{_downloadBytesRequest.Url} Level: {_options.DownloadVerifyLevel} Result: {verifyResult}";
YooLogger.Warning(error);
- if (_failedTryAgain > 0)
+ if (IsWaitForCompletion == false && _downloadRetry.CanRetry())
{
+ _downloadRetry.BeginWait();
_steps = ESteps.TryAgain;
}
else
@@ -290,7 +291,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = new AssetBundleResult(_downloadBytesRequest.Url, _options.Bundle, assetBundle, null);
+ BundleHandle = new AssetBundleHandle(_downloadBytesRequest.Url, _options.Bundle, assetBundle, null);
}
}
@@ -303,11 +304,8 @@ namespace YooAsset
_downloadBytesRequest = null;
}
- _tryAgainTimer += Time.unscaledDeltaTime;
- if (_tryAgainTimer > 1f)
+ if (_downloadRetry.Tick())
{
- _tryAgainTimer = 0f;
- _failedTryAgain--;
Progress = 0f;
_steps = ESteps.DataRequest;
}
@@ -336,12 +334,7 @@ namespace YooAsset
}
private string GetRequestURL()
{
- // 轮流返回请求地址
- _requestCount++;
- if (_requestCount % 2 == 0)
- return _options.FallbackURL;
- else
- return _options.MainURL;
+ return _options.URLPolicy.SelectURL(_options.CandidateURLs);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOptions.cs b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOptions.cs
index b0525dc1..829f48b6 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOptions.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/Common/LoadWebAssetBundleOptions.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
namespace YooAsset
{
@@ -17,14 +18,9 @@ namespace YooAsset
public PackageBundle Bundle { get; set; }
///
- /// 请求地址
+ /// 候选下载地址列表
///
- public string MainURL { get; set; }
-
- ///
- /// 备用请求地址
- ///
- public string FallbackURL { get; set; }
+ public IReadOnlyList CandidateURLs { get; set; }
///
/// AssetBundle 解密器
@@ -50,5 +46,15 @@ namespace YooAsset
/// 禁用Unity的网络缓存
///
public bool DisableUnityWebCache { get; set; }
+
+ ///
+ /// 下载重试判定策略
+ ///
+ public IDownloadRetryPolicy RetryPolicy { get; set; }
+
+ ///
+ /// URL 选择策略
+ ///
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOperation.cs
index 701baae4..265529cd 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOperation.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
namespace YooAsset
{
@@ -6,6 +7,130 @@ namespace YooAsset
///
internal abstract class FCClearCacheOperation : AsyncOperationBase
{
+ protected readonly struct ClearResult
+ {
+ ///
+ /// 错误信息
+ ///
+ public readonly string Error;
+
+ ///
+ /// 需要清理的资源标识符集合
+ ///
+ public readonly List BundleGUIDs;
+
+ ///
+ /// 是否成功
+ ///
+ public bool Succeeded
+ {
+ get { return Error == null; }
+ }
+
+ public ClearResult(string error)
+ {
+ Error = error;
+ BundleGUIDs = null;
+ }
+ public ClearResult(List bundleGUIDs)
+ {
+ Error = null;
+ BundleGUIDs = bundleGUIDs;
+ }
+
+ public static ClearResult Success(List bundleGUIDs)
+ {
+ return new ClearResult(bundleGUIDs);
+ }
+ public static ClearResult Failure(string error)
+ {
+ return new ClearResult(error);
+ }
+ }
+
+ protected ClearResult GetAllCache(IReadOnlyCollection cacheEntries)
+ {
+ var bundleGUIDs = new List(cacheEntries.Count);
+ foreach (var entry in cacheEntries)
+ {
+ bundleGUIDs.Add(entry.BundleGUID);
+ }
+ return ClearResult.Success(bundleGUIDs);
+ }
+ protected ClearResult GetUnusedCache(FCClearCacheOptions options, IReadOnlyCollection cacheEntries)
+ {
+ if (options.Manifest == null)
+ return ClearResult.Failure("Active package manifest not found.");
+
+ var bundleGUIDs = new List(cacheEntries.Count);
+ foreach (var entry in cacheEntries)
+ {
+ if (options.Manifest.IsIncludeBundleFile(entry.BundleGUID) == false)
+ {
+ bundleGUIDs.Add(entry.BundleGUID);
+ }
+ }
+ return ClearResult.Success(bundleGUIDs);
+ }
+ protected ClearResult GetCacheByLocations(FCClearCacheOptions options, IReadOnlyCollection cacheEntries)
+ {
+ if (options.Manifest == null)
+ return ClearResult.Failure("Active package manifest not found.");
+
+ if (options.ClearParam == null)
+ return ClearResult.Failure("Clear param is null.");
+
+ string[] locations;
+ if (options.ClearParam is string str)
+ locations = new string[] { str };
+ else if (options.ClearParam is List list)
+ locations = list.ToArray();
+ else if (options.ClearParam is string[] array)
+ locations = array;
+ else
+ return ClearResult.Failure($"Invalid clear param: {options.ClearParam.GetType().FullName}");
+
+ var bundleGUIDs = new List(locations.Length);
+ foreach (var location in locations)
+ {
+ string assetPath = options.Manifest.TryMappingToAssetPath(location);
+ if (options.Manifest.TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
+ {
+ PackageBundle bundle = options.Manifest.GetMainPackageBundle(packageAsset.BundleID);
+ bundleGUIDs.Add(bundle.BundleGUID);
+ }
+ }
+ return ClearResult.Success(bundleGUIDs);
+ }
+ protected ClearResult GetCacheByTags(FCClearCacheOptions options, IReadOnlyCollection cacheEntries)
+ {
+ if (options.Manifest == null)
+ return ClearResult.Failure("Active package manifest not found.");
+
+ if (options.ClearParam == null)
+ return ClearResult.Failure("Clear param is null.");
+
+ string[] tags;
+ if (options.ClearParam is string str)
+ tags = new string[] { str };
+ else if (options.ClearParam is List list)
+ tags = list.ToArray();
+ else if (options.ClearParam is string[] array)
+ tags = array;
+ else
+ return ClearResult.Failure($"Invalid clear param: {options.ClearParam.GetType().FullName}");
+
+ var bundleGUIDs = new List(cacheEntries.Count);
+ foreach (var entry in cacheEntries)
+ {
+ if (options.Manifest.TryGetPackageBundleByBundleGUID(entry.BundleGUID, out PackageBundle bundle))
+ {
+ if (bundle.HasTag(tags))
+ bundleGUIDs.Add(bundle.BundleGUID);
+ }
+ }
+ return ClearResult.Success(bundleGUIDs);
+ }
}
///
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs
new file mode 100644
index 00000000..f4730ff7
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs
@@ -0,0 +1,24 @@
+
+namespace YooAsset
+{
+ ///
+ /// 清理缓存操作选项
+ ///
+ internal struct FCClearCacheOptions
+ {
+ ///
+ /// 清理模式
+ ///
+ public string ClearMode { get; set; }
+
+ ///
+ /// 附加参数
+ ///
+ public object ClearParam { get; set; }
+
+ ///
+ /// 资源清单
+ ///
+ public PackageManifest Manifest { get; set; }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs.meta b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs.meta
new file mode 100644
index 00000000..894a8e79
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/FCClearCacheOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cb7284d99e0056242806b0b21db09c09
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileCache/Operations/FCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Operations/FCLoadBundleOperation.cs
index b72eed94..98d924b8 100644
--- a/Assets/YooAsset/Runtime/FileCache/Operations/FCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Operations/FCLoadBundleOperation.cs
@@ -6,7 +6,7 @@ namespace YooAsset
///
internal abstract class FCLoadBundleOperation : AsyncOperationBase
{
- protected struct LoadResult
+ protected readonly struct LoadResult
{
///
/// 错误信息
@@ -14,7 +14,7 @@ namespace YooAsset
public readonly string Error;
///
- /// 加载成功
+ /// 是否成功
///
public bool Succeeded
{
@@ -37,46 +37,9 @@ namespace YooAsset
}
///
- /// 资源包加载结果
+ /// 资源包句柄
///
- public IBundleResult BundleResult { get; protected set; }
-
- ///
- /// 检查文件路径是否支持 FileIO 读取
- ///
- protected bool SupportsFileIO(string filePath)
- {
- if (string.IsNullOrEmpty(filePath))
- return false;
- if (filePath.StartsWith("jar:") || filePath.StartsWith("content:"))
- return false;
- return true;
- }
-
- ///
- /// 判断是否为可重试的错误
- ///
- protected bool IsRetryableError(long httpCode)
- {
- // HTTP 状态码
- // 1xx 信息响应
- // 2xx 成功响应
- // 3xx 重定向消息
- // 4xx 客户端错误响应
- // 5xx 服务器错误响应
-
- if (httpCode == 0)
- return true;
-
- // 4xx 客户端错误不可重试
- // 说明:408 Request Timeout
- // 说明:429 Too Many Requests
- if (httpCode >= 400 && httpCode < 500)
- return httpCode == 408 || httpCode == 429;
-
- // 其它情况可重试
- return true;
- }
+ public IBundleHandle BundleHandle { get; protected set; }
}
///
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogDefine.cs b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogConsts.cs
similarity index 95%
rename from Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogDefine.cs
rename to Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogConsts.cs
index d04e9988..b8e47740 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogDefine.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogConsts.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 内置资源目录常量定义
///
- internal class BuiltinCatalogDefine
+ internal class BuiltinCatalogConsts
{
///
/// 文件极限大小(100MB)
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogDefine.cs.meta b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogDefine.cs.meta
rename to Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogTools.cs b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogTools.cs
index 6d573199..dd925a1e 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogTools.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinCatalogTools.cs
@@ -57,7 +57,7 @@ namespace YooAsset
// 创建内置清单实例
var buildinCatalog = new BuiltinCatalog();
- buildinCatalog.FileVersion = BuiltinCatalogDefine.FileVersion;
+ buildinCatalog.FileVersion = BuiltinCatalogConsts.FileVersion;
buildinCatalog.PackageName = packageName;
buildinCatalog.PackageVersion = packageVersion;
@@ -66,8 +66,8 @@ namespace YooAsset
{
"link.xml",
"buildlogtep.json",
- BuiltinCatalogDefine.JsonFileName,
- BuiltinCatalogDefine.BinaryFileName
+ BuiltinCatalogConsts.JsonFileName,
+ BuiltinCatalogConsts.BinaryFileName
};
string packageVersionFileName = YooAssetSettingsData.GetPackageVersionFileName(packageName);
string packageHashFileName = YooAssetSettingsData.GetPackageHashFileName(packageName, packageVersion);
@@ -106,13 +106,13 @@ namespace YooAsset
}
// 创建输出文件
- string jsonFilePath = $"{packageDirectory}/{BuiltinCatalogDefine.JsonFileName}";
+ string jsonFilePath = $"{packageDirectory}/{BuiltinCatalogConsts.JsonFileName}";
if (File.Exists(jsonFilePath))
File.Delete(jsonFilePath);
SerializeToJson(jsonFilePath, buildinCatalog);
// 创建输出文件
- string binaryFilePath = $"{packageDirectory}/{BuiltinCatalogDefine.BinaryFileName}";
+ string binaryFilePath = $"{packageDirectory}/{BuiltinCatalogConsts.BinaryFileName}";
if (File.Exists(binaryFilePath))
File.Delete(binaryFilePath);
SerializeToBinary(binaryFilePath, buildinCatalog);
@@ -129,18 +129,18 @@ namespace YooAsset
{
// 创建内置清单实例
var buildinFileCatalog = new BuiltinCatalog();
- buildinFileCatalog.FileVersion = BuiltinCatalogDefine.FileVersion;
+ buildinFileCatalog.FileVersion = BuiltinCatalogConsts.FileVersion;
buildinFileCatalog.PackageName = packageName;
buildinFileCatalog.PackageVersion = packageVersion;
// 创建输出文件
- string jsonFilePath = $"{outputPath}/{BuiltinCatalogDefine.JsonFileName}";
+ string jsonFilePath = $"{outputPath}/{BuiltinCatalogConsts.JsonFileName}";
if (File.Exists(jsonFilePath))
File.Delete(jsonFilePath);
SerializeToJson(jsonFilePath, buildinFileCatalog);
// 创建输出文件
- string binaryFilePath = $"{outputPath}/{BuiltinCatalogDefine.BinaryFileName}";
+ string binaryFilePath = $"{outputPath}/{BuiltinCatalogConsts.BinaryFileName}";
if (File.Exists(binaryFilePath))
File.Delete(binaryFilePath);
SerializeToBinary(binaryFilePath, buildinFileCatalog);
@@ -167,13 +167,13 @@ namespace YooAsset
using (FileStream fs = new FileStream(savePath, FileMode.Create))
{
// 创建缓存器
- BufferWriter buffer = new BufferWriter(BuiltinCatalogDefine.MaxFileSize);
+ BufferWriter buffer = new BufferWriter(BuiltinCatalogConsts.MaxFileSize);
// 写入文件标记
- buffer.WriteUInt32(BuiltinCatalogDefine.FileHeader);
+ buffer.WriteUInt32(BuiltinCatalogConsts.FileHeader);
// 写入文件版本
- buffer.WriteUTF8(BuiltinCatalogDefine.FileVersion);
+ buffer.WriteUTF8(BuiltinCatalogConsts.FileVersion);
// 写入文件头信息
buffer.WriteUTF8(catalog.PackageName);
@@ -216,13 +216,13 @@ namespace YooAsset
// 读取文件标记
uint fileHeader = buffer.ReadUInt32();
- if (fileHeader != BuiltinCatalogDefine.FileHeader)
+ if (fileHeader != BuiltinCatalogConsts.FileHeader)
throw new Exception("Invalid catalog file.");
// 读取文件版本
string fileVersion = buffer.ReadUTF8();
- if (fileVersion != BuiltinCatalogDefine.FileVersion)
- throw new Exception($"The catalog file version is not compatible: {fileVersion} != {BuiltinCatalogDefine.FileVersion}");
+ if (fileVersion != BuiltinCatalogConsts.FileVersion)
+ throw new Exception($"The catalog file version is not compatible: {fileVersion} != {BuiltinCatalogConsts.FileVersion}");
BuiltinCatalog catalog = new BuiltinCatalog();
{
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinFileCache.cs
index 2b1ba81d..50f18588 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/BuiltinFileCache.cs
@@ -96,7 +96,7 @@ namespace YooAsset
var operation = new FCWriteCacheCompleteOperation($"{nameof(BuiltinFileCache)} is readonly.");
return operation;
}
- public virtual FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options)
{
var operation = new FCClearCacheCompleteOperation($"{nameof(BuiltinFileCache)} is readonly.");
return operation;
@@ -120,7 +120,7 @@ namespace YooAsset
}
else
{
- string error = $"{nameof(BuiltinFileCache)} not support load bundle type : {options.Bundle.BundleType}";
+ string error = $"{nameof(BuiltinFileCache)} does not support bundle type: {options.Bundle.BundleType}";
var operation = new FCLoadBundleErrorOperation(error);
return operation;
}
@@ -132,7 +132,7 @@ namespace YooAsset
#region 内部方法
///
- /// 获取指定缓存
+ /// 获取指定缓存条目
///
internal BuiltinFileCacheEntry GetEntry(string bundleGUID)
{
@@ -143,7 +143,7 @@ namespace YooAsset
}
///
- /// 添加指定缓存
+ /// 添加指定缓存条目
///
internal void AddEntry(string bundleGUID, BuiltinFileCacheEntry cacheEntry)
{
@@ -158,7 +158,7 @@ namespace YooAsset
///
internal string GetCatalogBinaryFileLoadPath()
{
- return PathUtility.Combine(RootPath, BuiltinCatalogDefine.BinaryFileName);
+ return PathUtility.Combine(RootPath, BuiltinCatalogConsts.BinaryFileName);
}
#endregion
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/Operations/BFCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/Operations/BFCLoadBundleOperation.cs
index 0a428dae..e32f16d4 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/Operations/BFCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/BuiltinFileCache/Operations/BFCLoadBundleOperation.cs
@@ -72,12 +72,12 @@ namespace YooAsset
if (_loadLocalAssetBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadLocalAssetBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded bundle result is null.");
+ if (_loadLocalAssetBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadLocalAssetBundleOp.BundleResult;
+ BundleHandle = _loadLocalAssetBundleOp.BundleHandle;
}
else
{
@@ -164,12 +164,12 @@ namespace YooAsset
if(_loadLocalRawBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadLocalRawBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded bundle result is null.");
+ if (_loadLocalRawBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadLocalRawBundleOp.BundleResult;
+ BundleHandle = _loadLocalRawBundleOp.BundleHandle;
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/EditorFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/EditorFileCache.cs
index 49f62d0b..d8c24eef 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/EditorFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/EditorFileCache.cs
@@ -101,9 +101,9 @@ namespace YooAsset
var operation = new EFCWriteCacheOperation(this, options);
return operation;
}
- public virtual FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options)
{
- var operation = new FCClearCacheCompleteOperation();
+ var operation = new EFCClearCacheOperation(this, options);
return operation;
}
public virtual FCVerifyCacheOperation VerifyCacheAsync(FCVerifyCacheOptions options)
@@ -120,7 +120,7 @@ namespace YooAsset
}
else
{
- string error = $"{nameof(EditorFileCache)} not support load bundle type : {options.Bundle.BundleType}";
+ string error = $"{nameof(EditorFileCache)} does not support bundle type: {options.Bundle.BundleType}";
var operation = new FCLoadBundleErrorOperation(error);
return operation;
}
@@ -135,7 +135,15 @@ namespace YooAsset
#region 内部方法
///
- /// 添加指定缓存
+ /// 获取所有缓存条目
+ ///
+ internal IReadOnlyCollection GetAllEntries()
+ {
+ return _cacheEntries.Values;
+ }
+
+ ///
+ /// 添加指定缓存条目
///
internal void AddEntry(string bundleGUID, EditorFileCacheEntry cacheEntry)
{
@@ -144,6 +152,17 @@ namespace YooAsset
_cacheEntries.Add(bundleGUID, cacheEntry);
}
+
+ ///
+ /// 删除指定缓存条目
+ ///
+ internal void RemoveEntry(string bundleGUID)
+ {
+ if (_cacheEntries.TryGetValue(bundleGUID, out EditorFileCacheEntry entry))
+ {
+ _cacheEntries.Remove(bundleGUID);
+ }
+ }
#endregion
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs
new file mode 100644
index 00000000..cc9eb441
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs
@@ -0,0 +1,93 @@
+
+using System.Collections.Generic;
+
+namespace YooAsset
+{
+ ///
+ /// 清理沙盒文件缓存操作
+ ///
+ internal class EFCClearCacheOperation : FCClearCacheOperation
+ {
+ private enum ESteps
+ {
+ None,
+ GetResult,
+ ClearCacheFiles,
+ Done,
+ }
+
+ private readonly EditorFileCache _fileCache;
+ private readonly FCClearCacheOptions _options;
+ private List _bundleGUIDs;
+ private ESteps _steps = ESteps.None;
+
+ internal EFCClearCacheOperation(EditorFileCache fileCache, FCClearCacheOptions options)
+ {
+ _fileCache = fileCache;
+ _options = options;
+ }
+ internal override void InternalStart()
+ {
+ _steps = ESteps.GetResult;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.GetResult)
+ {
+ ClearResult clearResult;
+ if (_options.ClearMode == EFileClearMode.ClearAllBundleFiles.ToString())
+ {
+ clearResult = GetAllCache(_fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearUnusedBundleFiles.ToString())
+ {
+ clearResult = GetUnusedCache(_options, _fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearBundleFilesByLocations.ToString())
+ {
+ clearResult = GetCacheByLocations(_options, _fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearBundleFilesByTags.ToString())
+ {
+ clearResult = GetCacheByTags(_options, _fileCache.GetAllEntries());
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Invalid clear mode: {_options.ClearMode}";
+ return;
+ }
+
+ if (clearResult.Succeeded == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = clearResult.Error;
+ return;
+ }
+
+ _bundleGUIDs = clearResult.BundleGUIDs;
+ _steps = ESteps.ClearCacheFiles;
+ }
+
+ if (_steps == ESteps.ClearCacheFiles)
+ {
+ foreach(var bundleGUID in _bundleGUIDs)
+ {
+ _fileCache.RemoveEntry(bundleGUID);
+ }
+
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
+ }
+ internal override void InternalWaitForCompletion()
+ {
+ ExecuteBatch();
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs.meta b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs.meta
new file mode 100644
index 00000000..bf8ce1d3
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCClearCacheOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4dd5972832b5c9e40874d84a0e3b4b60
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCLoadBundleOperation.cs
index 3852cd46..a274e7c8 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/EditorFileCache/Operations/EFCLoadBundleOperation.cs
@@ -10,6 +10,7 @@ namespace YooAsset
{
None,
CheckCache,
+ CheckFilePath,
LoadBundle,
Done,
}
@@ -17,6 +18,7 @@ namespace YooAsset
private readonly EditorFileCache _fileCache;
private readonly PackageBundle _bundle;
private int _asyncSimulateFrame;
+ private string _editorFilePath;
private ESteps _steps = ESteps.None;
public EFCLoadBundleOperation(EditorFileCache fileCache, PackageBundle bundle)
@@ -44,7 +46,22 @@ namespace YooAsset
return;
}
- _steps = ESteps.LoadBundle;
+ _steps = ESteps.CheckFilePath;
+ }
+
+ if (_steps == ESteps.CheckFilePath)
+ {
+ _editorFilePath = EditorFileSystemTools.GetEditorFilePath(_bundle);
+ if (string.IsNullOrEmpty(_editorFilePath))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Editor file path is null. Bundle: {_bundle.BundleName}";
+ }
+ else
+ {
+ _steps = ESteps.LoadBundle;
+ }
}
if (_steps == ESteps.LoadBundle)
@@ -61,9 +78,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
-
- string editorFilePath = EditorFileSystemTools.GetEditorFilePath(_bundle);
- BundleResult = new VirtualBundleResult(editorFilePath, _bundle);
+ BundleHandle = new VirtualBundleHandle(_editorFilePath, _bundle);
}
}
else
@@ -73,9 +88,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
-
- string editorFilePath = EditorFileSystemTools.GetEditorFilePath(_bundle);
- BundleResult = new VirtualBundleResult(editorFilePath, _bundle);
+ BundleHandle = new VirtualBundleHandle(_editorFilePath, _bundle);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/SearchCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/SearchCacheFilesOperation.cs
index 4b929dba..c2fabfe9 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/SearchCacheFilesOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/SearchCacheFilesOperation.cs
@@ -92,8 +92,8 @@ namespace YooAsset
// 创建验证元素类
string fileRootPath = childDirectory;
- string dataFilePath = PathUtility.Combine(fileRootPath, SandboxFileCacheDefine.BundleDataFileName);
- string infoFilePath = PathUtility.Combine(fileRootPath, SandboxFileCacheDefine.BundleInfoFileName);
+ string dataFilePath = PathUtility.Combine(fileRootPath, SandboxFileCacheConsts.BundleDataFileName);
+ string infoFilePath = PathUtility.Combine(fileRootPath, SandboxFileCacheConsts.BundleInfoFileName);
var element = new SearchFileInfo(bundleGUID, fileRootPath, dataFilePath, infoFilePath);
Result.Add(element);
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/VerifyCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/VerifyCacheFilesOperation.cs
index f934c5de..de8c1370 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/VerifyCacheFilesOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/Internal/VerifyCacheFilesOperation.cs
@@ -56,7 +56,7 @@ namespace YooAsset
if (_maxConcurrentVerifyCount < 1)
_maxConcurrentVerifyCount = 1;
- YooLogger.Log($"Verify max concurrency : {_maxConcurrentVerifyCount}");
+ YooLogger.Log($"Verify max concurrency: {_maxConcurrentVerifyCount}");
_activeVerifyList = new List(_maxConcurrentVerifyCount);
_verifyStartTime = TimeUtility.RealtimeSinceStartup;
_verifyTotalCount = _pendingVerifyList.Count;
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCClearCacheOperation.cs
index 97ceeb79..cb90a4bf 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCClearCacheOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCClearCacheOperation.cs
@@ -1,46 +1,74 @@
-using System.Collections.Generic;
namespace YooAsset
{
///
/// 清理沙盒文件缓存操作
///
- internal abstract class SFCClearCacheOperation : FCClearCacheOperation
+ internal class SFCClearCacheOperation : FCClearCacheOperation
{
- protected enum ESteps
+ private enum ESteps
{
None,
- ParseOptions,
+ GetResult,
ClearCacheFiles,
Done,
}
- protected readonly SandboxFileCache _fileCache;
- protected readonly ClearCacheOptions _options;
- protected ClearCacheFilesOperation _clearCacheFilesOp;
- protected List _bundleGUIDs;
- protected ESteps _steps = ESteps.None;
+ private readonly SandboxFileCache _fileCache;
+ private readonly FCClearCacheOptions _options;
+ private ClearCacheFilesOperation _clearCacheFilesOp;
+ private ESteps _steps = ESteps.None;
- internal SFCClearCacheOperation(SandboxFileCache fileCache, ClearCacheOptions options)
+ internal SFCClearCacheOperation(SandboxFileCache fileCache, FCClearCacheOptions options)
{
_fileCache = fileCache;
_options = options;
}
internal override void InternalStart()
{
- _steps = ESteps.ParseOptions;
+ _steps = ESteps.GetResult;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.ParseOptions)
+ if (_steps == ESteps.GetResult)
{
- if (ParseOptionsStep() == false)
+ ClearResult clearResult;
+ if (_options.ClearMode == EFileClearMode.ClearAllBundleFiles.ToString())
+ {
+ clearResult = GetAllCache(_fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearUnusedBundleFiles.ToString())
+ {
+ clearResult = GetUnusedCache(_options, _fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearBundleFilesByLocations.ToString())
+ {
+ clearResult = GetCacheByLocations(_options, _fileCache.GetAllEntries());
+ }
+ else if (_options.ClearMode == EFileClearMode.ClearBundleFilesByTags.ToString())
+ {
+ clearResult = GetCacheByTags(_options, _fileCache.GetAllEntries());
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Invalid clear mode: {_options.ClearMode}";
return;
+ }
- _clearCacheFilesOp = new ClearCacheFilesOperation(_fileCache, _bundleGUIDs);
+ if (clearResult.Succeeded == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = clearResult.Error;
+ return;
+ }
+
+ _clearCacheFilesOp = new ClearCacheFilesOperation(_fileCache, clearResult.BundleGUIDs);
_clearCacheFilesOp.StartOperation();
AddChildOperation(_clearCacheFilesOp);
_steps = ESteps.ClearCacheFiles;
@@ -73,165 +101,5 @@ namespace YooAsset
{
ExecuteBatch();
}
-
- protected abstract bool ParseOptionsStep();
- }
-
- ///
- /// 清理所有沙盒缓存操作
- ///
- internal sealed class SFCClearAllCacheOperation : SFCClearCacheOperation
- {
- internal SFCClearAllCacheOperation(SandboxFileCache fileCache, ClearCacheOptions options)
- : base(fileCache, options) { }
-
- protected override bool ParseOptionsStep()
- {
- var allEntries = _fileCache.GetAllEntries();
- _bundleGUIDs = new List(allEntries.Count);
- foreach (var entry in allEntries)
- {
- _bundleGUIDs.Add(entry.BundleGUID);
- }
- return true;
- }
- }
- ///
- /// 清理未使用的沙盒缓存操作
- ///
- internal sealed class SFCClearUnusedCacheOperation : SFCClearCacheOperation
- {
- internal SFCClearUnusedCacheOperation(SandboxFileCache fileCache, ClearCacheOptions options)
- : base(fileCache, options) { }
-
- protected override bool ParseOptionsStep()
- {
- if (_options.Manifest == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Active package manifest not found.";
- return false;
- }
-
- var allEntries = _fileCache.GetAllEntries();
- _bundleGUIDs = new List(allEntries.Count);
- foreach (var entry in allEntries)
- {
- if (_options.Manifest.IsIncludeBundleFile(entry.BundleGUID) == false)
- {
- _bundleGUIDs.Add(entry.BundleGUID);
- }
- }
- return true;
- }
- }
- ///
- /// 按资源地址清理沙盒缓存操作
- ///
- internal sealed class SFCClearCacheByLocationsOperation : SFCClearCacheOperation
- {
- internal SFCClearCacheByLocationsOperation(SandboxFileCache fileCache, ClearCacheOptions options)
- : base(fileCache, options) { }
-
- protected override bool ParseOptionsStep()
- {
- if (_options.Manifest == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Active package manifest not found.";
- return false;
- }
-
- if (_options.ClearParam == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Clear param is null.";
- return false;
- }
-
- string[] locations;
- if (_options.ClearParam is string str)
- locations = new string[] { str };
- else if (_options.ClearParam is List list)
- locations = list.ToArray();
- else if (_options.ClearParam is string[] array)
- locations = array;
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Invalid clear param: {_options.ClearParam.GetType().FullName}";
- return false;
- }
-
- _bundleGUIDs = new List(locations.Length);
- foreach (var location in locations)
- {
- string assetPath = _options.Manifest.TryMappingToAssetPath(location);
- if (_options.Manifest.TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
- {
- PackageBundle bundle = _options.Manifest.GetMainPackageBundle(packageAsset.BundleID);
- _bundleGUIDs.Add(bundle.BundleGUID);
- }
- }
- return true;
- }
- }
- ///
- /// 按标签清理沙盒缓存操作
- ///
- internal sealed class SFCClearCacheByTagsOperation : SFCClearCacheOperation
- {
- internal SFCClearCacheByTagsOperation(SandboxFileCache fileCache, ClearCacheOptions options)
- : base(fileCache, options) { }
-
- protected override bool ParseOptionsStep()
- {
- if (_options.Manifest == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Active package manifest not found.";
- return false;
- }
-
- if (_options.ClearParam == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Clear param is null.";
- return false;
- }
-
- string[] tags;
- if (_options.ClearParam is string str)
- tags = new string[] { str };
- else if (_options.ClearParam is List list)
- tags = list.ToArray();
- else if (_options.ClearParam is string[] array)
- tags = array;
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Invalid clear param: {_options.ClearParam.GetType().FullName}";
- return false;
- }
-
- var allEntries = _fileCache.GetAllEntries();
- _bundleGUIDs = new List(allEntries.Count);
- foreach (var entry in allEntries)
- {
- if (_options.Manifest.TryGetPackageBundleByBundleGUID(entry.BundleGUID, out PackageBundle bundle))
- {
- if (bundle.HasTag(tags))
- _bundleGUIDs.Add(bundle.BundleGUID);
- }
- }
- return true;
- }
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCLoadBundleOperation.cs
index c7420487..2ed18202 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/Operations/SFCLoadBundleOperation.cs
@@ -78,12 +78,12 @@ namespace YooAsset
if (_loadLocalAssetBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadLocalAssetBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded asset bundle result is null.");
+ if (_loadLocalAssetBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded asset bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadLocalAssetBundleOp.BundleResult;
+ BundleHandle = _loadLocalAssetBundleOp.BundleHandle;
}
else
{
@@ -173,7 +173,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = new AssetBundleResult(_cacheEntry.DataFilePath, _bundle, assetBundle, null);
+ BundleHandle = new AssetBundleHandle(_cacheEntry.DataFilePath, _bundle, assetBundle, null);
}
}
}
@@ -269,12 +269,12 @@ namespace YooAsset
if (_loadLocalRawBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadLocalRawBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded raw bundle result is null.");
+ if (_loadLocalRawBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded raw bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadLocalRawBundleOp.BundleResult;
+ BundleHandle = _loadLocalRawBundleOp.BundleHandle;
}
else
{
@@ -289,4 +289,26 @@ namespace YooAsset
ExecuteBatch();
}
}
+
+#if TUANJIE_1_7_OR_NEWER
+ internal class SFCLoadInstantBundleOperation : FCLoadBundleOperation
+ {
+ private enum ESteps
+ {
+ None,
+ GetEntry,
+ LoadBundle,
+ Done,
+ }
+
+ internal override void InternalStart()
+ {
+ throw new NotImplementedException();
+ }
+ internal override void InternalUpdate()
+ {
+ throw new NotImplementedException();
+ }
+ }
+#endif
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCache.cs
index 86e0a19a..ba99302f 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCache.cs
@@ -109,34 +109,10 @@ namespace YooAsset
var operation = new SFCWriteCacheOperation(this, options);
return operation;
}
- public virtual FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options)
{
- if (options.ClearMode == EFileClearMode.ClearAllBundleFiles.ToString())
- {
- var operation = new SFCClearAllCacheOperation(this, options);
- return operation;
- }
- else if (options.ClearMode == EFileClearMode.ClearUnusedBundleFiles.ToString())
- {
- var operation = new SFCClearUnusedCacheOperation(this, options);
- return operation;
- }
- else if (options.ClearMode == EFileClearMode.ClearBundleFilesByLocations.ToString())
- {
- var operation = new SFCClearCacheByLocationsOperation(this, options);
- return operation;
- }
- else if (options.ClearMode == EFileClearMode.ClearBundleFilesByTags.ToString())
- {
- var operation = new SFCClearCacheByTagsOperation(this, options);
- return operation;
- }
- else
- {
- string error = $"Invalid clear mode : {options.ClearMode}";
- var operation = new FCClearCacheCompleteOperation(error);
- return operation;
- }
+ var operation = new SFCClearCacheOperation(this, options);
+ return operation;
}
public virtual FCVerifyCacheOperation VerifyCacheAsync(FCVerifyCacheOptions options)
{
@@ -157,7 +133,7 @@ namespace YooAsset
}
else
{
- string error = $"{nameof(SandboxFileCache)} not support load bundle type : {options.Bundle.BundleType}";
+ string error = $"{nameof(SandboxFileCache)} does not support bundle type: {options.Bundle.BundleType}";
var operation = new FCLoadBundleErrorOperation(error);
return operation;
}
@@ -176,7 +152,7 @@ namespace YooAsset
if (_dataFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
{
string folderName = GetHashFolderName(bundle.FileHash);
- filePath = PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheDefine.BundleDataFileName);
+ filePath = PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheConsts.BundleDataFileName);
_dataFilePathMapping.Add(bundle.BundleGUID, filePath);
}
return filePath;
@@ -190,7 +166,7 @@ namespace YooAsset
if (_infoFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
{
string folderName = GetHashFolderName(bundle.FileHash);
- filePath = PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheDefine.BundleInfoFileName);
+ filePath = PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheConsts.BundleInfoFileName);
_infoFilePathMapping.Add(bundle.BundleGUID, filePath);
}
return filePath;
@@ -202,7 +178,7 @@ namespace YooAsset
internal string GetDataTempFilePath(PackageBundle bundle)
{
string folderName = GetHashFolderName(bundle.FileHash);
- return PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheDefine.BundleDataTempFileName);
+ return PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheConsts.BundleDataTempFileName);
}
///
@@ -211,11 +187,11 @@ namespace YooAsset
internal string GetInfoTempFilePath(PackageBundle bundle)
{
string folderName = GetHashFolderName(bundle.FileHash);
- return PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheDefine.BundleInfoTempFileName);
+ return PathUtility.Combine(RootPath, folderName, bundle.BundleGUID, SandboxFileCacheConsts.BundleInfoTempFileName);
}
///
- /// 获取指定缓存
+ /// 获取指定缓存条目
///
internal SandboxFileCacheEntry GetEntry(string bundleGUID)
{
@@ -226,7 +202,7 @@ namespace YooAsset
}
///
- /// 获取所有缓存
+ /// 获取所有缓存条目
///
internal IReadOnlyCollection GetAllEntries()
{
@@ -234,7 +210,7 @@ namespace YooAsset
}
///
- /// 添加指定缓存
+ /// 添加指定缓存条目
///
internal void AddEntry(string bundleGUID, SandboxFileCacheEntry cacheEntry)
{
@@ -246,7 +222,7 @@ namespace YooAsset
}
///
- /// 删除指定缓存
+ /// 删除指定缓存条目
///
internal void RemoveEntry(string bundleGUID)
{
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheDefine.cs b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheConsts.cs
similarity index 94%
rename from Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheDefine.cs
rename to Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheConsts.cs
index a3dad407..3852e49d 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheDefine.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheConsts.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 沙盒文件缓存常量定义
///
- internal class SandboxFileCacheDefine
+ internal class SandboxFileCacheConsts
{
///
/// 数据文件名称
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheDefine.cs.meta b/Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheDefine.cs.meta
rename to Assets/YooAsset/Runtime/FileCache/Services/SandboxFileCache/SandboxFileCacheConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/Operations/WRFCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/Operations/WRFCLoadBundleOperation.cs
index d350d3f6..d1fee9bf 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/Operations/WRFCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/Operations/WRFCLoadBundleOperation.cs
@@ -56,13 +56,14 @@ namespace YooAsset
var options = new LoadWebAssetBundleOptions();
options.CacheName = _fileCache.GetType().Name;
options.Bundle = _options.Bundle;
- options.MainURL = _cacheEntry.MainURL;
- options.FallbackURL = _cacheEntry.FallbackURL;
+ options.CandidateURLs = _cacheEntry.URLs;
options.AssetBundleDecryptor = _fileCache.Config.AssetBundleDecryptor;
options.DownloadBackend = _fileCache.Config.DownloadBackend;
options.DownloadVerifyLevel = _fileCache.Config.DownloadVerifyLevel;
options.WatchdogTimeout = _fileCache.Config.WatchdogTimeout;
options.DisableUnityWebCache = _fileCache.Config.DisableUnityWebCache;
+ options.RetryPolicy = _fileCache.Config.RetryPolicy;
+ options.URLPolicy = _fileCache.Config.URLPolicy;
if (_options.Bundle.IsEncrypted)
_loadWebAssetBundleOp = new LoadWebEncryptedAssetBundleOperation(options);
@@ -79,12 +80,12 @@ namespace YooAsset
if (_loadWebAssetBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadWebAssetBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded bundle result is null.");
+ if (_loadWebAssetBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadWebAssetBundleOp.BundleResult;
+ BundleHandle = _loadWebAssetBundleOp.BundleHandle;
}
else
{
@@ -100,7 +101,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"{nameof(WebRemoteFileCache)} not support sync load asset bundle.";
+ Error = $"{nameof(WebRemoteFileCache)} does not support synchronous asset bundle loading.";
YooLogger.Error(Error);
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCache.cs
index b7fef8f8..fe402aa7 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCache.cs
@@ -42,6 +42,16 @@ namespace YooAsset
/// 下载后台接口
///
public IDownloadBackend DownloadBackend { get; set; }
+
+ ///
+ /// 下载重试判定策略
+ ///
+ public IDownloadRetryPolicy RetryPolicy { get; set; }
+
+ ///
+ /// URL 选择策略
+ ///
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
private readonly Dictionary _cacheEntries = new Dictionary(10000);
@@ -111,7 +121,7 @@ namespace YooAsset
var operation = new FCWriteCacheCompleteOperation($"{nameof(WebRemoteFileCache)} is readonly.");
return operation;
}
- public virtual FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options)
{
var operation = new FCClearCacheCompleteOperation($"{nameof(WebRemoteFileCache)} is readonly.");
return operation;
@@ -130,7 +140,7 @@ namespace YooAsset
}
else
{
- string error = $"{nameof(WebRemoteFileCache)} not support load bundle type : {options.Bundle.BundleType}";
+ string error = $"{nameof(WebRemoteFileCache)} does not support bundle type: {options.Bundle.BundleType}";
var operation = new FCLoadBundleErrorOperation(error);
return operation;
}
@@ -152,9 +162,8 @@ namespace YooAsset
}
else
{
- string mainURL = Config.RemoteServices.GetRemoteMainURL(bundle.FileName);
- string fallbackURL = Config.RemoteServices.GetRemoteFallbackURL(bundle.FileName);
- var newEntry = new WebRemoteFileCacheEntry(bundle.BundleGUID, mainURL, fallbackURL);
+ var urls = Config.RemoteServices.GetRemoteURLs(bundle.FileName);
+ var newEntry = new WebRemoteFileCacheEntry(bundle.BundleGUID, urls);
_cacheEntries.Add(bundle.BundleGUID, newEntry);
return newEntry;
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCacheEntry.cs b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCacheEntry.cs
index c799a425..bb4ccbd5 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCacheEntry.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/WebRemoteFileCache/WebRemoteFileCacheEntry.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
namespace YooAsset
{
@@ -12,26 +13,19 @@ namespace YooAsset
public string BundleGUID { get; private set; }
///
- /// 主下载地址
+ /// 候选下载地址列表
///
- public string MainURL { get; private set; }
-
- ///
- /// 备用下载地址
- ///
- public string FallbackURL { get; private set; }
+ public IReadOnlyList URLs { get; private set; }
///
/// 创建Web远端文件缓存条目
///
/// 资源包唯一标识
- /// 主下载地址
- /// 备用下载地址
- public WebRemoteFileCacheEntry(string bundleGUID, string mainURL, string fallbackURL)
+ /// 候选下载地址列表
+ public WebRemoteFileCacheEntry(string bundleGUID, IReadOnlyList urls)
{
BundleGUID = bundleGUID;
- MainURL = mainURL;
- FallbackURL = fallbackURL;
+ URLs = urls;
}
}
-}
\ No newline at end of file
+}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/Operations/WSFCLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/Operations/WSFCLoadBundleOperation.cs
index 7fd05def..ddd5b265 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/Operations/WSFCLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/Operations/WSFCLoadBundleOperation.cs
@@ -57,13 +57,14 @@ namespace YooAsset
var options = new LoadWebAssetBundleOptions();
options.CacheName = _fileCache.GetType().Name;
options.Bundle = _options.Bundle;
- options.MainURL = url;
- options.FallbackURL = url;
+ options.CandidateURLs = new[] { url };
options.AssetBundleDecryptor = _fileCache.Config.AssetBundleDecryptor;
options.DownloadBackend = _fileCache.Config.DownloadBackend;
options.DownloadVerifyLevel = _fileCache.Config.DownloadVerifyLevel;
options.WatchdogTimeout = _fileCache.Config.WatchdogTimeout;
options.DisableUnityWebCache = _fileCache.Config.DisableUnityWebCache;
+ options.RetryPolicy = _fileCache.Config.RetryPolicy;
+ options.URLPolicy = _fileCache.Config.URLPolicy;
if (_options.Bundle.IsEncrypted)
_loadWebAssetBundleOp = new LoadWebEncryptedAssetBundleOperation(options);
@@ -80,12 +81,12 @@ namespace YooAsset
if (_loadWebAssetBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadWebAssetBundleOp.BundleResult == null)
- throw new YooInternalException("Loaded bundle result is null.");
+ if (_loadWebAssetBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded bundle handle is null.");
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- BundleResult = _loadWebAssetBundleOp.BundleResult;
+ BundleHandle = _loadWebAssetBundleOp.BundleHandle;
}
else
{
@@ -101,7 +102,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"{nameof(WebServerFileCache)} not support sync load asset bundle.";
+ Error = $"{nameof(WebServerFileCache)} does not support synchronous asset bundle loading.";
YooLogger.Error(Error);
}
}
diff --git a/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/WebServerFileCache.cs b/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/WebServerFileCache.cs
index 7c0726c5..52134162 100644
--- a/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/WebServerFileCache.cs
+++ b/Assets/YooAsset/Runtime/FileCache/Services/WebServerFileCache/WebServerFileCache.cs
@@ -37,6 +37,16 @@ namespace YooAsset
/// 下载后台
///
public IDownloadBackend DownloadBackend { get; set; }
+
+ ///
+ /// 下载重试判定策略
+ ///
+ public IDownloadRetryPolicy RetryPolicy { get; set; }
+
+ ///
+ /// URL 选择策略
+ ///
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
private readonly Dictionary _cacheEntries = new Dictionary(10000);
@@ -106,7 +116,7 @@ namespace YooAsset
var operation = new FCWriteCacheCompleteOperation($"{nameof(WebServerFileCache)} is readonly.");
return operation;
}
- public virtual FCClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FCClearCacheOperation ClearCacheAsync(FCClearCacheOptions options)
{
var operation = new FCClearCacheCompleteOperation($"{nameof(WebServerFileCache)} is readonly.");
return operation;
@@ -125,7 +135,7 @@ namespace YooAsset
}
else
{
- string error = $"{nameof(WebServerFileCache)} not support load bundle type : {options.Bundle.BundleType}";
+ string error = $"{nameof(WebServerFileCache)} does not support bundle type: {options.Bundle.BundleType}";
var operation = new FCLoadBundleErrorOperation(error);
return operation;
}
@@ -148,7 +158,7 @@ namespace YooAsset
}
///
- /// 添加指定缓存
+ /// 添加指定缓存条目
///
internal void AddEntry(string bundleGUID, WebServerFileCacheEntry cacheEntry)
{
@@ -163,7 +173,7 @@ namespace YooAsset
///
internal string GetCatalogBinaryFileLoadPath()
{
- return PathUtility.Combine(RootPath, BuiltinCatalogDefine.BinaryFileName);
+ return PathUtility.Combine(RootPath, BuiltinCatalogConsts.BinaryFileName);
}
#endregion
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces/IBundleResult.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces/IBundleResult.cs
deleted file mode 100644
index 403775f2..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Interfaces/IBundleResult.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using UnityEngine.SceneManagement;
-
-namespace YooAsset
-{
- internal interface IBundleResult
- {
- ///
- /// 获取资源包文件的本地路径
- ///
- string GetBundleFilePath();
-
- ///
- /// 卸载资源包文件
- ///
- void UnloadBundleFile();
-
- ///
- /// 加载资源包内的资源对象
- ///
- FSLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo);
-
- ///
- /// 加载资源包内的所有资源对象
- ///
- FSLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo);
-
- ///
- /// 加载资源包内的资源对象及所有子资源对象
- ///
- FSLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo);
-
- ///
- /// 加载资源包内的场景对象
- ///
- FSLoadSceneOperation LoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad);
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAllAssetsOperation.cs
deleted file mode 100644
index 9250aac8..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAllAssetsOperation.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-
-namespace YooAsset
-{
- internal abstract class FSLoadAllAssetsOperation : AsyncOperationBase
- {
- public UnityEngine.Object[] Result;
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAssetOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAssetOperation.cs
deleted file mode 100644
index 8d104412..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadAssetOperation.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-
-namespace YooAsset
-{
- internal abstract class FSLoadAssetOperation : AsyncOperationBase
- {
- public UnityEngine.Object Result;
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSceneOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSceneOperation.cs
deleted file mode 100644
index c6fc5d7a..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSceneOperation.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-
-namespace YooAsset
-{
- internal abstract class FSLoadSceneOperation : AsyncOperationBase
- {
- public UnityEngine.SceneManagement.Scene Result;
-
- public abstract void UnSuspendLoad();
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSubAssetsOperation.cs
deleted file mode 100644
index a984c204..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Operations/FSLoadSubAssetsOperation.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-
-namespace YooAsset
-{
- internal abstract class FSLoadSubAssetsOperation : AsyncOperationBase
- {
- public UnityEngine.Object[] Result;
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAllAssetsOperation.cs
deleted file mode 100644
index 1bb4949a..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadAllAssetsOperation.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-
-namespace YooAsset
-{
- internal class RawBundleLoadAllAssetsOperation : FSLoadAllAssetsOperation
- {
- internal override void InternalStart()
- {
- Error = $"{nameof(RawBundleLoadAllAssetsOperation)} not support load all assets.";
- Status = EOperationStatus.Failed;
- }
- internal override void InternalUpdate()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSceneOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSceneOperation.cs
deleted file mode 100644
index cfaf775c..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSceneOperation.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-
-namespace YooAsset
-{
- internal class RawBundleLoadSceneOperation : FSLoadSceneOperation
- {
- internal override void InternalStart()
- {
- Error = $"{nameof(RawBundleLoadSceneOperation)} not support load scene.";
- Status = EOperationStatus.Failed;
- }
- internal override void InternalUpdate()
- {
- }
- public override void UnSuspendLoad()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSubAssetsOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSubAssetsOperation.cs
deleted file mode 100644
index de2d389e..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/RawBundleResult/Operations/RawBundleLoadSubAssetsOperation.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-
-namespace YooAsset
-{
- internal class RawBundleLoadSubAssetsOperation : FSLoadSubAssetsOperation
- {
- internal override void InternalStart()
- {
- Error = $"{nameof(RawBundleLoadSubAssetsOperation)} not support load sub assets.";
- Status = EOperationStatus.Failed;
- }
- internal override void InternalUpdate()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/VirtualBundleResult.cs b/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/VirtualBundleResult.cs
deleted file mode 100644
index c1d2d7d8..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Bundles/Services/VirtualBundleResult/VirtualBundleResult.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using UnityEngine.SceneManagement;
-
-namespace YooAsset
-{
- internal class VirtualBundleResult : IBundleResult
- {
- private readonly string _bundleFilePath;
- private readonly PackageBundle _packageBundle;
-
- public VirtualBundleResult(string bundleFilePath, PackageBundle bundle)
- {
- _bundleFilePath = bundleFilePath;
- _packageBundle = bundle;
- }
- public void UnloadBundleFile()
- {
- }
- public string GetBundleFilePath()
- {
- return _bundleFilePath;
- }
-
- public FSLoadAssetOperation LoadAssetAsync(AssetInfo assetInfo)
- {
- var operation = new VirtualBundleLoadAssetOperation(_packageBundle, assetInfo);
- return operation;
- }
- public FSLoadAllAssetsOperation LoadAllAssetsAsync(AssetInfo assetInfo)
- {
- var operation = new VirtualBundleLoadAllAssetsOperation(_packageBundle, assetInfo);
- return operation;
- }
- public FSLoadSubAssetsOperation LoadSubAssetsAsync(AssetInfo assetInfo)
- {
- var operation = new VirtualBundleLoadSubAssetsOperation(_packageBundle, assetInfo);
- return operation;
- }
- public FSLoadSceneOperation LoadSceneOperation(AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad)
- {
- var operation = new VirtualBundleLoadSceneOperation(assetInfo, loadParams, suspendLoad);
- return operation;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs b/Assets/YooAsset/Runtime/FileSystem/FileSystemConsts.cs
similarity index 82%
rename from Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs
rename to Assets/YooAsset/Runtime/FileSystem/FileSystemConsts.cs
index 6b95fa52..22a5b9c8 100644
--- a/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/FileSystemConsts.cs
@@ -1,7 +1,10 @@
namespace YooAsset
{
- public class FileSystemParametersDefine
+ ///
+ /// 文件系统参数常量定义
+ ///
+ public class FileSystemConsts
{
///
/// 初始化的时候缓存文件校验级别
@@ -16,7 +19,7 @@ namespace YooAsset
///
/// 覆盖安装缓存清理模式
///
- public const string INSTALL_CLEAR_MODE = "INSTALL_CLEAR_MODE";
+ public const string INSTALL_CLEANUP_MODE = "INSTALL_CLEANUP_MODE";
///
/// 远端资源地址查询服务类
@@ -61,17 +64,12 @@ namespace YooAsset
///
/// 下载任务的看门狗机制超时时间
///
- public const string DOWNLOAD_WATCH_DOG_TIME = "DOWNLOAD_WATCH_DOG_TIME";
+ public const string DOWNLOAD_WATCHDOG_TIMEOUT = "DOWNLOAD_WATCHDOG_TIMEOUT";
///
/// 启用断点续传的最小尺寸
///
- public const string DOWNLOAD_RESUME_MINMUM_SIZE = "DOWNLOAD_RESUME_MINMUM_SIZE";
-
- ///
- /// 断点续传下载器关注的错误码 >
- ///
- public const string DOWNLOAD_RESUME_RESPONSE_CODES = "DOWNLOAD_RESUME_RESPONSE_CODES";
+ public const string DOWNLOAD_RESUME_MINIMUM_SIZE = "DOWNLOAD_RESUME_MINIMUM_SIZE";
///
/// 模拟WebGL平台模式
@@ -101,12 +99,12 @@ namespace YooAsset
///
/// 拷贝内置清单
///
- public const string COPY_BUILDIN_PACKAGE_MANIFEST = "COPY_BUILDIN_PACKAGE_MANIFEST";
+ public const string COPY_BUILTIN_PACKAGE_MANIFEST = "COPY_BUILTIN_PACKAGE_MANIFEST";
///
/// 拷贝内置清单的目标目录
///
- public const string COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT = "COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT";
+ public const string COPY_BUILTIN_PACKAGE_MANIFEST_DEST_ROOT = "COPY_BUILTIN_PACKAGE_MANIFEST_DEST_ROOT";
///
/// 解压文件系统的根目录
@@ -127,5 +125,15 @@ namespace YooAsset
/// 资源清单解密器
///
public const string MANIFEST_DECRYPTOR = "MANIFEST_DECRYPTOR";
+
+ ///
+ /// 下载重试判定策略
+ ///
+ public const string DOWNLOAD_RETRY_POLICY = "DOWNLOAD_RETRY_POLICY";
+
+ ///
+ /// URL 选择策略
+ ///
+ public const string DOWNLOAD_URL_POLICY = "DOWNLOAD_URL_POLICY";
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs.meta b/Assets/YooAsset/Runtime/FileSystem/FileSystemConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/FileSystemConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs
index 5e593adf..33978859 100644
--- a/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs
@@ -15,12 +15,12 @@ namespace YooAsset
/// 格式: "namespace.class,assembly"
/// 格式: "命名空间.类型名,程序集"
///
- public string FileSystemClass { private set; get; }
+ public string FileSystemClass { get; private set; }
///
/// 文件系统的根目录
///
- public string PackageRoot { private set; get; }
+ public string PackageRoot { get; private set; }
public FileSystemParameters(string fileSystemClass, string packageRoot)
@@ -42,12 +42,12 @@ namespace YooAsset
///
internal IFileSystem CreateFileSystem(string packageName)
{
- YooLogger.Log($"The package {packageName} create file system : {FileSystemClass}");
+ YooLogger.Log($"The package {packageName} create file system: {FileSystemClass}");
Type classType = Type.GetType(FileSystemClass);
if (classType == null)
{
- YooLogger.Error($"Can not found file system class type {FileSystemClass}");
+ YooLogger.Error($"Cannot find file system class type: {FileSystemClass}");
return null;
}
@@ -69,8 +69,8 @@ namespace YooAsset
#region 创建默认的文件系统类
///
/// 创建默认的编辑器文件系统参数
- /// 文件系统的根目录
///
+ /// 文件系统的根目录
public static FileSystemParameters CreateDefaultEditorFileSystemParameters(string packageRoot)
{
string fileSystemClass = typeof(EditorFileSystem).FullName;
@@ -82,7 +82,7 @@ namespace YooAsset
/// 创建默认的内置文件系统参数
///
/// 文件系统的根目录
- public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(string packageRoot = null)
+ public static FileSystemParameters CreateDefaultBuiltinFileSystemParameters(string packageRoot = null)
{
string fileSystemClass = typeof(BuiltinFileSystem).FullName;
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
@@ -90,28 +90,27 @@ namespace YooAsset
}
///
- /// 创建默认的缓存文件系统参数
+ /// 创建默认的沙盒文件系统参数
///
/// 远端资源地址查询服务类
/// 文件系统的根目录
- public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, string packageRoot = null)
+ public static FileSystemParameters CreateDefaultSandboxFileSystemParameters(IRemoteServices remoteServices, string packageRoot = null)
{
string fileSystemClass = typeof(SandboxFileSystem).FullName;
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
- fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices);
+ fileSystemParams.AddParameter(FileSystemConsts.REMOTE_SERVICES, remoteServices);
return fileSystemParams;
}
///
/// 创建默认的WebServer文件系统参数
///
- /// 加密文件解密服务类
/// 禁用Unity的网络缓存
public static FileSystemParameters CreateDefaultWebServerFileSystemParameters(bool disableUnityWebCache = false)
{
string fileSystemClass = typeof(WebServerFileSystem).FullName;
var fileSystemParams = new FileSystemParameters(fileSystemClass, null);
- fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
+ fileSystemParams.AddParameter(FileSystemConsts.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
return fileSystemParams;
}
@@ -119,14 +118,13 @@ namespace YooAsset
/// 创建默认的WebRemote文件系统参数
///
/// 远端资源地址查询服务类
- /// 加密文件解密服务类
/// 禁用Unity的网络缓存
public static FileSystemParameters CreateDefaultWebRemoteFileSystemParameters(IRemoteServices remoteServices, bool disableUnityWebCache = false)
{
string fileSystemClass = typeof(WebRemoteFileSystem).FullName;
var fileSystemParams = new FileSystemParameters(fileSystemClass, null);
- fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices);
- fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
+ fileSystemParams.AddParameter(FileSystemConsts.REMOTE_SERVICES, remoteServices);
+ fileSystemParams.AddParameter(FileSystemConsts.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
return fileSystemParams;
}
#endregion
diff --git a/Assets/YooAsset/Runtime/FileSystem/Interfaces/IFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Interfaces/IFileSystem.cs
index b12983c0..cd5f10d5 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Interfaces/IFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Interfaces/IFileSystem.cs
@@ -1,6 +1,9 @@
-
+
namespace YooAsset
{
+ ///
+ /// 文件系统接口
+ ///
internal interface IFileSystem
{
///
@@ -16,17 +19,17 @@ namespace YooAsset
///
/// 查询包裹版本
///
- FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options);
+ FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options);
///
/// 加载包裹清单
///
- FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options);
+ FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options);
///
- /// 清理缓存文件
+ /// 加载Bundle文件
///
- FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options);
+ FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options);
///
/// 下载Bundle文件
@@ -34,9 +37,9 @@ namespace YooAsset
FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options);
///
- /// 加载Bundle文件
+ /// 清理缓存文件
///
- FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options);
+ FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options);
///
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOperation.cs
index 4dfaa558..242dd1bb 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOperation.cs
@@ -1,5 +1,8 @@
namespace YooAsset
{
+ ///
+ /// 加载Web远端包裹清单文件操作
+ ///
internal class LoadWebPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -12,15 +15,14 @@ namespace YooAsset
}
private readonly LoadWebPackageManifestOptions _options;
- private IDownloadBytesRequest _webDataRequestOp;
- private DeserializeManifestOperation _deserializer;
- private int _requestCount = 0;
+ private IDownloadBytesRequest _downloadBytesRequest;
+ private DeserializeManifestOperation _deserializeManifestOp;
private ESteps _steps = ESteps.None;
///
/// 包裹清单
///
- public PackageManifest Manifest { private set; get; }
+ public PackageManifest Manifest { get; private set; }
internal LoadWebPackageManifestOperation(LoadWebPackageManifestOptions options)
@@ -29,7 +31,6 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_options.PackageName, nameof(LoadWebPackageManifestOperation));
_steps = ESteps.RequestFileData;
}
internal override void InternalUpdate()
@@ -39,20 +40,20 @@ namespace YooAsset
if (_steps == ESteps.RequestFileData)
{
- if (_webDataRequestOp == null)
+ if (_downloadBytesRequest == null)
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_options.PackageName, _options.PackageVersion);
string url = GetRequestURL(fileName);
var args = new DownloadDataRequestArgs(url, _options.Timeout, 0);
- _webDataRequestOp = _options.DownloadBackend.CreateBytesRequest(args);
- _webDataRequestOp.SendRequest();
+ _downloadBytesRequest = _options.DownloadBackend.CreateBytesRequest(args);
+ _downloadBytesRequest.SendRequest();
}
- Progress = _webDataRequestOp.DownloadProgress;
- if (_webDataRequestOp.IsDone == false)
+ Progress = _downloadBytesRequest.DownloadProgress;
+ if (_downloadBytesRequest.IsDone == false)
return;
- if (_webDataRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadBytesRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.VerifyFileData;
}
@@ -60,14 +61,14 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webDataRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_options.PackageName, nameof(LoadWebPackageManifestOperation));
+ Error = _downloadBytesRequest.Error;
+ _options.URLPolicy.OnFailure(_downloadBytesRequest.Url, _downloadBytesRequest.HttpCode, _downloadBytesRequest.HttpError);
}
}
if (_steps == ESteps.VerifyFileData)
{
- if (PackageManifestTools.VerifyManifestData(_webDataRequestOp.Result, _options.PackageHash))
+ if (PackageManifestTools.VerifyManifestData(_downloadBytesRequest.Result, _options.PackageHash))
{
_steps = ESteps.LoadManifest;
}
@@ -81,52 +82,49 @@ namespace YooAsset
if (_steps == ESteps.LoadManifest)
{
- if (_deserializer == null)
+ if (_deserializeManifestOp == null)
{
- _deserializer = new DeserializeManifestOperation(_options.ManifestDecryptor, _webDataRequestOp.Result);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
+ _deserializeManifestOp = new DeserializeManifestOperation(_options.ManifestDecryptor, _downloadBytesRequest.Result);
+ _deserializeManifestOp.StartOperation();
+ AddChildOperation(_deserializeManifestOp);
}
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
+ _deserializeManifestOp.UpdateOperation();
+ Progress = _deserializeManifestOp.Progress;
+ if (_deserializeManifestOp.IsDone == false)
return;
- if (_deserializer.Status == EOperationStatus.Succeeded)
+ if (_deserializeManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
+ Manifest = _deserializeManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
+ Error = _deserializeManifestOp.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webDataRequestOp != null)
+ if (_downloadBytesRequest != null)
{
- _webDataRequestOp.Dispose();
- _webDataRequestOp = null;
+ _downloadBytesRequest.Dispose();
+ _downloadBytesRequest = null;
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_options.PackageVersion} PackageHash : {_options.PackageHash}";
+ return $"PackageVersion: {_options.PackageVersion} PackageHash: {_options.PackageHash}";
}
private string GetRequestURL(string fileName)
{
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _options.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _options.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _options.RemoteServices.GetRemoteURLs(fileName);
+ return _options.URLPolicy.SelectURL(urls);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOptions.cs
index 2685308b..b5db96ad 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOptions.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/LoadWebPackageManifestOptions.cs
@@ -10,5 +10,6 @@ namespace YooAsset
public IRemoteServices RemoteServices { get; set; }
public IManifestDecryptor ManifestDecryptor { get; set; }
public IDownloadBackend DownloadBackend { get; set; }
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOperation.cs
index fce6f1f2..5972b3ab 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOperation.cs
@@ -1,5 +1,8 @@
namespace YooAsset
{
+ ///
+ /// 请求Web远端包裹哈希操作
+ ///
internal class RequestWebPackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -10,14 +13,13 @@ namespace YooAsset
}
private readonly RequestWebPackageHashOptions _options;
- private IDownloadTextRequest _webTextRequestOp;
- private int _requestCount = 0;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹哈希值
///
- public string PackageHash { private set; get; }
+ public string PackageHash { get; private set; }
public RequestWebPackageHashOperation(RequestWebPackageHashOptions options)
@@ -26,7 +28,6 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_options.PackageName, nameof(RequestWebPackageHashOperation));
_steps = ESteps.RequestPackageHash;
}
internal override void InternalUpdate()
@@ -36,27 +37,27 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageHash)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(_options.PackageName, _options.PackageVersion);
string url = GetRequestURL(fileName);
var args = new DownloadDataRequestArgs(url, _options.Timeout, 0);
- _webTextRequestOp = _options.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _options.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- Progress = _webTextRequestOp.DownloadProgress;
- if (_webTextRequestOp.IsDone == false)
+ Progress = _downloadTextRequest.DownloadProgress;
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageHash = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageHash))
+ PackageHash = _downloadTextRequest.Result;
+ if (TextUtility.ValidateContent(PackageHash, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Web package hash file content is empty.";
+ Error = $"Web package hash file validate failed: {validateError}";
}
else
{
@@ -68,27 +69,24 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_options.PackageName, nameof(RequestWebPackageHashOperation));
+ Error = _downloadTextRequest.Error;
+ _options.URLPolicy.OnFailure(_downloadTextRequest.Url, _downloadTextRequest.HttpCode, _downloadTextRequest.HttpError);
}
}
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
private string GetRequestURL(string fileName)
{
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _options.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _options.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _options.RemoteServices.GetRemoteURLs(fileName);
+ return _options.URLPolicy.SelectURL(urls);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOptions.cs
index 96d0d119..2bca92ee 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOptions.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageHashOptions.cs
@@ -8,5 +8,6 @@ namespace YooAsset
public IRemoteServices RemoteServices { get; set; }
public IDownloadBackend DownloadBackend { get; set; }
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOperation.cs
index c58a463c..6a98ff5b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOperation.cs
@@ -1,5 +1,8 @@
namespace YooAsset
{
+ ///
+ /// 请求Web远端包裹版本操作
+ ///
internal class RequestWebPackageVersionOperation : AsyncOperationBase
{
private enum ESteps
@@ -10,14 +13,13 @@ namespace YooAsset
}
private readonly RequestWebPackageVersionOptions _options;
- private IDownloadTextRequest _webTextRequestOp;
- private int _requestCount = 0;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹版本
///
- public string PackageVersion { private set; get; }
+ public string PackageVersion { get; private set; }
public RequestWebPackageVersionOperation(RequestWebPackageVersionOptions options)
@@ -26,7 +28,6 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_options.PackageName, nameof(RequestWebPackageVersionOperation));
_steps = ESteps.RequestPackageVersion;
}
internal override void InternalUpdate()
@@ -36,27 +37,27 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(_options.PackageName);
string url = GetRequestURL(fileName);
var args = new DownloadDataRequestArgs(url, _options.Timeout, 0);
- _webTextRequestOp = _options.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _options.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- Progress = _webTextRequestOp.DownloadProgress;
- if (_webTextRequestOp.IsDone == false)
+ Progress = _downloadTextRequest.DownloadProgress;
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageVersion = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageVersion))
+ PackageVersion = _downloadTextRequest.Result;
+ if (TextUtility.ValidateContent(PackageVersion, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Web package version file content is empty.";
+ Error = $"Web package version file validate failed: {validateError}";
}
else
{
@@ -68,29 +69,24 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_options.PackageName, nameof(RequestWebPackageVersionOperation));
+ Error = _downloadTextRequest.Error;
+ _options.URLPolicy.OnFailure(_downloadTextRequest.Url, _downloadTextRequest.HttpCode, _downloadTextRequest.HttpError);
}
}
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
private string GetRequestURL(string fileName)
{
- string url;
-
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- url = _options.RemoteServices.GetRemoteMainURL(fileName);
- else
- url = _options.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _options.RemoteServices.GetRemoteURLs(fileName);
+ string url = _options.URLPolicy.SelectURL(urls);
// 在URL末尾添加时间戳
if (_options.AppendTimeTicks)
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOptions.cs
index 8a744ea5..22c2f6f2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOptions.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/Common/RequestWebPackageVersionOptions.cs
@@ -8,5 +8,6 @@ namespace YooAsset
public IRemoteServices RemoteServices { get; set; }
public IDownloadBackend DownloadBackend { get; set; }
+ public IDownloadURLPolicy URLPolicy { get; set; }
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs
new file mode 100644
index 00000000..0d0cff73
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs
@@ -0,0 +1,36 @@
+
+namespace YooAsset
+{
+ ///
+ /// 清理缓存操作选项
+ ///
+ internal struct FSClearCacheOptions
+ {
+ ///
+ /// 清理模式
+ ///
+ public string ClearMode { get; set; }
+
+ ///
+ /// 附加参数
+ ///
+ public object ClearParam { get; set; }
+
+ ///
+ /// 资源清单
+ ///
+ public PackageManifest Manifest { get; set; }
+
+ ///
+ /// 转换为 FileCache 的清理选项
+ ///
+ public FCClearCacheOptions ConvertTo()
+ {
+ var options = new FCClearCacheOptions();
+ options.ClearMode = ClearMode;
+ options.ClearParam = ClearParam;
+ options.Manifest = Manifest;
+ return options;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs.meta
new file mode 100644
index 00000000..e695ac89
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSClearCacheOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8b101c60f3954004daf353498f618e22
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSDownloadFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSDownloadFileOperation.cs
index f4f9693a..44b0a739 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/FSDownloadFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSDownloadFileOperation.cs
@@ -1,26 +1,24 @@
-
+
namespace YooAsset
{
+ ///
+ /// 下载文件操作的抽象基类
+ ///
internal abstract class FSDownloadFileOperation : AsyncOperationBase
{
- public PackageBundle Bundle { private set; get; }
+ ///
+ /// 关联的资源包信息
+ ///
+ public PackageBundle Bundle { get; private set; }
///
- /// 当前下载的字节数
+ /// 下载报告
///
- public long DownloadedBytes { protected set; get; }
-
- ///
- /// 当前下载进度(0f - 1f)
- ///
- public float DownloadProgress { protected set; get; }
-
+ public DownloadReport Report { get; protected set; }
public FSDownloadFileOperation(PackageBundle bundle)
{
Bundle = bundle;
- DownloadedBytes = 0;
- DownloadProgress = 0;
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadBundleOperation.cs
deleted file mode 100644
index 2c18b185..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadBundleOperation.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-
-namespace YooAsset
-{
- internal abstract class FSLoadBundleOperation : AsyncOperationBase
- {
- ///
- /// 加载结果
- ///
- public IBundleResult Result { protected set; get; }
-
- ///
- /// 下载进度
- ///
- public float DownloadProgress { protected set; get; }
-
- ///
- /// 下载大小
- ///
- public long DownloadedBytes { protected set; get; }
-
- ///
- /// 终止下载文件
- ///
- public bool AbortDownloadFile = false;
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOperation.cs
new file mode 100644
index 00000000..63e7a984
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOperation.cs
@@ -0,0 +1,19 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载资源包文件操作的抽象基类
+ ///
+ internal abstract class FSLoadPackageBundleOperation : AsyncOperationBase
+ {
+ ///
+ /// 资源包句柄
+ ///
+ public IBundleHandle BundleHandle { get; protected set; }
+
+ ///
+ /// 终止下载文件
+ ///
+ public bool AbortDownloadFile = false;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs
new file mode 100644
index 00000000..ab23ffa0
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs
@@ -0,0 +1,27 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载资源包操作选项
+ ///
+ internal readonly struct FSLoadPackageBundleOptions
+ {
+ ///
+ /// 资源包
+ ///
+ public readonly PackageBundle Bundle;
+
+ public FSLoadPackageBundleOptions(PackageBundle bundle)
+ {
+ Bundle = bundle;
+ }
+
+ ///
+ /// 转换为 FileCache 的加载选项
+ ///
+ public FCLoadBundleOptions ConvertTo()
+ {
+ return new FCLoadBundleOptions(Bundle);
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs.meta
new file mode 100644
index 00000000..0b7d23e7
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageBundleOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 31b4d0371eae35749aebe94c93c7cae3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOperation.cs
similarity index 67%
rename from Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOperation.cs
index b69be2e4..72a99692 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOperation.cs
@@ -1,7 +1,7 @@
namespace YooAsset
{
- internal abstract class FSLoadManifestOperation : AsyncOperationBase
+ internal abstract class FSLoadPackageManifestOperation : AsyncOperationBase
{
///
/// 资源清单
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs
new file mode 100644
index 00000000..1bac69ee
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs
@@ -0,0 +1,25 @@
+
+namespace YooAsset
+{
+ ///
+ /// 加载包裹清单操作选项
+ ///
+ internal readonly struct FSLoadPackageManifestOptions
+ {
+ ///
+ /// 包裹版本
+ ///
+ public readonly string PackageVersion;
+
+ ///
+ /// 超时时间
+ ///
+ public readonly int Timeout;
+
+ public FSLoadPackageManifestOptions(string packageVersion, int timeout)
+ {
+ PackageVersion = packageVersion;
+ Timeout = timeout;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs.meta
new file mode 100644
index 00000000..2112ac2a
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSLoadPackageManifestOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5015b71d4115e724880b025f48bbbacc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOperation.cs
similarity index 66%
rename from Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOperation.cs
index 0495532f..a0cc5e40 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOperation.cs
@@ -1,7 +1,7 @@
namespace YooAsset
{
- internal abstract class FSRequestVersionOperation : AsyncOperationBase
+ internal abstract class FSRequestPackageVersionOperation : AsyncOperationBase
{
///
/// 资源版本
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs
new file mode 100644
index 00000000..6aabfbf1
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs
@@ -0,0 +1,25 @@
+
+namespace YooAsset
+{
+ ///
+ /// 请求包裹版本操作选项
+ ///
+ internal readonly struct FSRequestPackageVersionOptions
+ {
+ ///
+ /// 在URL末尾添加时间戳
+ ///
+ public readonly bool AppendTimeTicks;
+
+ ///
+ /// 超时时间
+ ///
+ public readonly int Timeout;
+
+ public FSRequestPackageVersionOptions(bool appendTimeTicks, int timeout)
+ {
+ AppendTimeTicks = appendTimeTicks;
+ Timeout = timeout;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs.meta
new file mode 100644
index 00000000..5bfd0222
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Operations/FSRequestPackageVersionOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fab7c8b0f6490b44fa8686d5348da201
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystem.cs
index 2fd15332..80bd8f30 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystem.cs
@@ -13,19 +13,19 @@ namespace YooAsset
protected readonly Dictionary _builtinFilePathMapping = new Dictionary(10000);
protected readonly Dictionary _tempFilePathMapping = new Dictionary(10000);
protected string _packageRoot;
- protected string _unpackTempFilesRoot;
+ protected string _tempFilesRoot;
protected string _unpackManifestFilesRoot;
protected string _unpackBundleFilesRoot;
///
/// 内置文件缓存系统
///
- public IFileCache BuiltinFileCache { private set; get; }
+ public IFileCache BuiltinFileCache { get; private set; }
///
/// 沙盒文件缓存系统
///
- public IFileCache UnpackFileCache { private set; get; }
+ public IFileCache UnpackFileCache { get; private set; }
///
/// 解压调度器
@@ -35,62 +35,64 @@ namespace YooAsset
///
/// 下载后台接口
///
- public IDownloadBackend DownloadBackend { private set; get; }
+ public IDownloadBackend DownloadBackend { get; private set; }
///
/// 包裹名称
///
- public string PackageName { private set; get; }
+ public string PackageName { get; private set; }
#region 自定义参数
///
/// 自定义参数:UnityWebRequest 创建委托
///
- public UnityWebRequestCreator WebRequestCreator { private set; get; }
+ public UnityWebRequestCreator WebRequestCreator { get; private set; }
///
/// 自定义参数:覆盖安装缓存清理模式
///
- public EInstallCleanupMode InstallClearMode { private set; get; } = EInstallCleanupMode.ClearAllManifestFiles;
+ public EInstallCleanupMode InstallCleanupMode { get; private set; } = EInstallCleanupMode.None;
///
/// 自定义参数:初始化的时候缓存文件校验级别
///
- public EFileVerifyLevel FileVerifyLevel { private set; get; } = EFileVerifyLevel.Middle;
+ public EFileVerifyLevel FileVerifyLevel { get; private set; } = EFileVerifyLevel.Low;
///
/// 自定义参数:初始化的时候缓存文件校验最大并发数
+ /// 默认值:8(推荐值为处理器数两倍)
+ /// 说明:过大的值可能导致线程池任务过多,影响系统稳定性
///
- public int FileVerifyMaxConcurrency { private set; get; } = 32;
+ public int FileVerifyMaxConcurrency { get; private set; } = 8;
///
/// 自定义参数:拷贝内置清单
///
- public bool CopyBuildinPackageManifest { private set; get; } = false;
+ public bool CopyBuiltinPackageManifest { get; private set; } = false;
///
/// 自定义参数:拷贝内置清单的目标目录
/// 注意:该参数为空的时候,会获取默认的沙盒目录!
///
- public string CopyBuildinPackageManifestDestRoot { private set; get; }
+ public string CopyBuiltinPackageManifestDestRoot { get; private set; }
///
/// 自定义参数:解压文件系统的根目录
///
- public string UnpackFileSystemRoot { private set; get; }
+ public string UnpackFileSystemRoot { get; private set; }
///
/// 自定义参数:最大并发连接数
/// 默认值:8(推荐范围 1-32)
///
- public int UnpackMaxConcurrency { private set; get; }
+ public int UnpackMaxConcurrency { get; private set; } = 8;
///
/// 自定义参数:每帧发起的最大请求数
/// 默认值:8(推荐范围 1-32)
/// 说明:避免单帧发起过多请求导致卡顿
///
- public int UnpackMaxRequestPerFrame { private set; get; }
+ public int UnpackMaxRequestPerFrame { get; private set; } = 8;
///
/// 自定义参数:AssetBundle 解密器
@@ -110,7 +112,7 @@ namespace YooAsset
///
/// 自定义参数:资源清单解密器
///
- public IManifestDecryptor ManifestDecryptor { private set; get; }
+ public IManifestDecryptor ManifestDecryptor { get; private set; }
#endregion
@@ -122,19 +124,19 @@ namespace YooAsset
var operation = new BFSInitializeOperation(this);
return operation;
}
- public virtual FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options)
{
- var operation = new BFSRequestVersionOperation(this);
+ var operation = new BFSRequestPackageVersionOperation(this);
return operation;
}
- public virtual FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options)
{
- var operation = new BFSLoadManifestOperation(this, options.PackageVersion);
+ var operation = new BFSLoadPackageManifestOperation(this, options.PackageVersion);
return operation;
}
- public virtual FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options)
{
- var operation = new BFSClearCacheOperation(this, options);
+ var operation = new BFSLoadPackageBundleOperation(this, options);
return operation;
}
public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
@@ -142,48 +144,61 @@ namespace YooAsset
var operation = new BFSDownloadFileOperation(this, options);
return operation;
}
- public virtual FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options)
+ public virtual FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options)
{
- var operation = new BFSLoadBundleOperation(this, options);
- return operation;
+ if (options.ClearMode == EManifestClearMode.ClearAllManifestFiles.ToString())
+ {
+ var operation = new FSClearCacheCompleteOperation();
+ return operation;
+ }
+ else if (options.ClearMode == EManifestClearMode.ClearUnusedManifestFiles.ToString())
+ {
+ var operation = new FSClearCacheCompleteOperation();
+ return operation;
+ }
+ else
+ {
+ var operation = new BFSClearCacheOperation(this, options);
+ return operation;
+ }
}
public virtual void SetParameter(string name, object value)
{
- if (name == FileSystemParametersDefine.DOWNLOAD_BACKEND)
+ if (name == FileSystemConsts.DOWNLOAD_BACKEND)
{
DownloadBackend = (IDownloadBackend)value;
}
- else if (name == FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR)
+ else if (name == FileSystemConsts.UNITY_WEB_REQUEST_CREATOR)
{
WebRequestCreator = (UnityWebRequestCreator)value;
}
- else if (name == FileSystemParametersDefine.INSTALL_CLEAR_MODE)
+ else if (name == FileSystemConsts.INSTALL_CLEANUP_MODE)
{
- InstallClearMode = (EInstallCleanupMode)value;
+ InstallCleanupMode = (EInstallCleanupMode)value;
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_LEVEL)
+ else if (name == FileSystemConsts.FILE_VERIFY_LEVEL)
{
FileVerifyLevel = (EFileVerifyLevel)value;
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_MAX_CONCURRENCY)
+ else if (name == FileSystemConsts.FILE_VERIFY_MAX_CONCURRENCY)
{
int convertValue = Convert.ToInt32(value);
FileVerifyMaxConcurrency = Mathf.Clamp(convertValue, 1, int.MaxValue);
}
- else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST)
+ else if (name == FileSystemConsts.COPY_BUILTIN_PACKAGE_MANIFEST)
{
- CopyBuildinPackageManifest = Convert.ToBoolean(value);
+ CopyBuiltinPackageManifest = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT)
+ else if (name == FileSystemConsts.COPY_BUILTIN_PACKAGE_MANIFEST_DEST_ROOT)
{
- CopyBuildinPackageManifestDestRoot = (string)value;
+ CopyBuiltinPackageManifestDestRoot = (string)value;
}
- else if (name == FileSystemParametersDefine.UNPACK_FILE_SYSTEM_ROOT)
+ else if (name == FileSystemConsts.UNPACK_FILE_SYSTEM_ROOT)
{
UnpackFileSystemRoot = (string)value;
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_CONCURRENCY)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_CONCURRENCY)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -194,7 +209,7 @@ namespace YooAsset
// 限制在合理范围内:1-32
UnpackMaxConcurrency = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_REQUEST_PER_FRAME)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_REQUEST_PER_FRAME)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -205,25 +220,25 @@ namespace YooAsset
// 限制在合理范围内:1-32
UnpackMaxRequestPerFrame = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_DECRYPTOR)
{
AssetBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.RAWBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.RAWBUNDLE_DECRYPTOR)
{
RawBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_FALLBACK_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_FALLBACK_DECRYPTOR)
{
AssetBundleFallbackDecryptor = (IBundleMemoryDecryptor)value;
}
- else if (name == FileSystemParametersDefine.MANIFEST_DECRYPTOR)
+ else if (name == FileSystemConsts.MANIFEST_DECRYPTOR)
{
ManifestDecryptor = (IManifestDecryptor)value;
}
else
{
- YooLogger.Warning($"Invalid parameter : {name}");
+ YooLogger.Warning($"Invalid parameter: {name}");
}
}
public virtual void OnCreate(string packageName, string packageRoot)
@@ -238,12 +253,12 @@ namespace YooAsset
// 设置根目录
string unpackRoot;
if (string.IsNullOrEmpty(UnpackFileSystemRoot))
- unpackRoot = GetDefaultUnpackPathRoot(packageName);
+ unpackRoot = GetDefaultUnpackPackageRoot(packageName);
else
unpackRoot = UnpackFileSystemRoot;
- _unpackManifestFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemDefine.UnpackManifestFilesFolderName);
- _unpackBundleFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemDefine.UnpackBundleFilesFolderName);
- _unpackTempFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemDefine.UnpackTempFilesFolderName);
+ _unpackManifestFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemConsts.UnpackManifestFilesFolderName);
+ _unpackBundleFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemConsts.UnpackBundleFilesFolderName);
+ _tempFilesRoot = PathUtility.Combine(unpackRoot, BuiltinFileSystemConsts.UnpackTempFilesFolderName);
// 创建默认的下载后台接口
if (DownloadBackend == null)
@@ -285,7 +300,7 @@ namespace YooAsset
if (UnpackScheduler != null)
{
- UnpackScheduler.Dispose();
+ UnpackScheduler.AbortOperation();
UnpackScheduler = null;
}
@@ -342,12 +357,19 @@ namespace YooAsset
}
#region 内部方法
+ ///
+ /// 获取默认的内置包裹根目录
+ ///
public string GetDefaultBuiltinPackageRoot(string packageName)
{
- string rootDirectory = YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ string rootDirectory = YooAssetSettingsData.GetYooDefaultBuiltinRoot();
return PathUtility.Combine(rootDirectory, packageName);
}
- public string GetBuiltinFileLoadPath(PackageBundle bundle)
+
+ ///
+ /// 获取内置文件路径
+ ///
+ public string GetBuiltinBundleFilePath(PackageBundle bundle)
{
if (_builtinFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
{
@@ -356,28 +378,44 @@ namespace YooAsset
}
return filePath;
}
+
+ ///
+ /// 获取内置包裹版本文件路径
+ ///
public string GetBuiltinPackageVersionFilePath()
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(PackageName);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取内置包裹哈希文件路径
+ ///
public string GetBuiltinPackageHashFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取内置包裹清单文件路径
+ ///
public string GetBuiltinPackageManifestFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName);
}
- public string GetSandboxAppFootPrintFilePath()
+
+ ///
+ /// 获取沙盒应用程序水印文件路径
+ ///
+ public string GetSandboxAppFootprintFilePath()
{
- return PathUtility.Combine(_unpackManifestFilesRoot, SandboxFileSystemDefine.AppFootPrintFileName);
+ return PathUtility.Combine(_unpackManifestFilesRoot, SandboxFileSystemConsts.AppFootprintFileName);
}
///
- /// 删除所有解压的资源文件
+ /// 删除所有缓存的资源文件
///
public void DeleteAllBundleFiles()
{
@@ -387,10 +425,32 @@ namespace YooAsset
}
}
+ ///
+ /// 删除所有缓存的清单文件
+ ///
+ public void DeleteAllManifestFiles()
+ {
+ if (Directory.Exists(_unpackManifestFilesRoot))
+ {
+ Directory.Delete(_unpackManifestFilesRoot, true);
+ }
+ }
+
+ ///
+ /// 删除所有缓存的临时文件
+ ///
+ public void DeleteAllTempFIles()
+ {
+ if (Directory.Exists(_tempFilesRoot))
+ {
+ Directory.Delete(_tempFilesRoot, true);
+ }
+ }
+
///
/// 获取默认的解压根目录
///
- public string GetDefaultUnpackPathRoot(string packageName)
+ public string GetDefaultUnpackPackageRoot(string packageName)
{
string rootDirectory = YooAssetSettingsData.GetYooDefaultCacheRoot();
return PathUtility.Combine(rootDirectory, packageName);
@@ -403,7 +463,7 @@ namespace YooAsset
{
if (_tempFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
{
- filePath = PathUtility.Combine(_unpackTempFilesRoot, bundle.BundleGUID);
+ filePath = PathUtility.Combine(_tempFilesRoot, bundle.BundleGUID);
_tempFilePathMapping.Add(bundle.BundleGUID, filePath);
}
return filePath;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemDefine.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemConsts.cs
similarity index 82%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemDefine.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemConsts.cs
index 10012505..d4cfead5 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemDefine.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemConsts.cs
@@ -1,7 +1,10 @@
namespace YooAsset
{
- internal class BuiltinFileSystemDefine
+ ///
+ /// 内置文件系统常量定义
+ ///
+ internal class BuiltinFileSystemConsts
{
///
/// 解压清单文件的文件夹名称
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemDefine.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemDefine.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/BuiltinFileSystemConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSClearCacheOperation.cs
index 61ce1a75..d4ebe6a5 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSClearCacheOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSClearCacheOperation.cs
@@ -1,6 +1,9 @@
-
+
namespace YooAsset
{
+ ///
+ /// 内置文件系统的清理缓存操作
+ ///
internal class BFSClearCacheOperation : FSClearCacheOperation
{
private enum ESteps
@@ -11,11 +14,11 @@ namespace YooAsset
}
private readonly BuiltinFileSystem _fileSystem;
- private readonly ClearCacheOptions _options;
+ private readonly FSClearCacheOptions _options;
private FCClearCacheOperation _clearCacheOp;
private ESteps _steps = ESteps.None;
- internal BFSClearCacheOperation(BuiltinFileSystem fileSystem, ClearCacheOptions options)
+ internal BFSClearCacheOperation(BuiltinFileSystem fileSystem, FSClearCacheOptions options)
{
_fileSystem = fileSystem;
_options = options;
@@ -33,7 +36,7 @@ namespace YooAsset
{
if (_clearCacheOp == null)
{
- _clearCacheOp = _fileSystem.UnpackFileCache.ClearCacheAsync(_options);
+ _clearCacheOp = _fileSystem.UnpackFileCache.ClearCacheAsync(_options.ConvertTo());
_clearCacheOp.StartOperation();
AddChildOperation(_clearCacheOp);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSDownloadFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSDownloadFileOperation.cs
index 7d6037aa..2614e771 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSDownloadFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSDownloadFileOperation.cs
@@ -1,15 +1,17 @@
-using UnityEngine;
namespace YooAsset
{
+ ///
+ /// 内置文件系统的解压文件操作
+ ///
internal class BFSDownloadFileOperation : FSDownloadFileOperation
{
private enum ESteps
{
None,
CheckExists,
- UnpackAndCache,
- TryAgain,
+ CreateUnpack,
+ CheckUnpack,
Done,
}
@@ -18,15 +20,10 @@ namespace YooAsset
private DownloadFileBaseOperation _downloadFileOp;
private ESteps _steps = ESteps.None;
- // 失败重试
- private float _tryAgainTimer = 0;
- private int _failedTryAgain;
-
internal BFSDownloadFileOperation(BuiltinFileSystem fileSystem, FSDownloadFileOptions options) : base(options.Bundle)
{
_fileSystem = fileSystem;
_options = options;
- _failedTryAgain = options.RetryCount;
}
internal override void InternalStart()
{
@@ -47,31 +44,33 @@ namespace YooAsset
}
else
{
- _steps = ESteps.UnpackAndCache;
+ _steps = ESteps.CreateUnpack;
}
}
- // 下载并缓存文件
- if (_steps == ESteps.UnpackAndCache)
+ // 创建解压器
+ if (_steps == ESteps.CreateUnpack)
{
+ _downloadFileOp = _fileSystem.UnpackScheduler.TryGetDownloadFile(Bundle);
if (_downloadFileOp == null)
{
- _downloadFileOp = _fileSystem.UnpackScheduler.TryGetDownloadFile(Bundle);
- if (_downloadFileOp == null)
- {
- string builtinFilePath = _fileSystem.GetBuiltinFileLoadPath(Bundle);
- _downloadFileOp = new UnpackAndCacheFileOperation(_fileSystem, Bundle, builtinFilePath);
- _fileSystem.UnpackScheduler.AddDownloadFile(_downloadFileOp);
- }
+ string builtinFilePath = _fileSystem.GetBuiltinBundleFilePath(Bundle);
+ _downloadFileOp = new UnpackAndCacheFileOperation(_fileSystem, Bundle, builtinFilePath);
+ _fileSystem.UnpackScheduler.AddDownloadFile(_downloadFileOp);
}
+ _steps = ESteps.CheckUnpack;
+ }
+
+ // 检测结果
+ if (_steps == ESteps.CheckUnpack)
+ {
if (IsWaitForCompletion)
_downloadFileOp.WaitForCompletion();
_downloadFileOp.UpdateOperation();
Progress = _downloadFileOp.Progress;
- DownloadedBytes = _downloadFileOp.DownloadedBytes;
- DownloadProgress = _downloadFileOp.DownloadProgress;
+ Report = _downloadFileOp.Report;
if (_downloadFileOp.IsDone == false)
return;
@@ -82,33 +81,10 @@ namespace YooAsset
}
else
{
- if (IsWaitForCompletion == false && _failedTryAgain > 0)
- {
- _steps = ESteps.TryAgain;
- YooLogger.Warning($"Failed download : {_downloadFileOp.Url} Try again.");
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _downloadFileOp.Error;
- YooLogger.Error(Error);
- }
- }
- }
-
- // 重新尝试下载
- if (_steps == ESteps.TryAgain)
- {
- _tryAgainTimer += Time.unscaledDeltaTime;
- if (_tryAgainTimer > 1f)
- {
- _tryAgainTimer = 0f;
- _failedTryAgain--;
- Progress = 0f;
- DownloadProgress = 0f;
- DownloadedBytes = 0;
- _steps = ESteps.UnpackAndCache;
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _downloadFileOp.Error;
+ YooLogger.Error(Error);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSInitializeOperation.cs
index f15ba5f7..a50f3af2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSInitializeOperation.cs
@@ -1,11 +1,15 @@
-
+
namespace YooAsset
{
+ ///
+ /// 内置文件系统的初始化操作
+ ///
internal class BFSInitializeOperation : FSInitializeOperation
{
private enum ESteps
{
None,
+ CheckPlatform,
CheckAppFootprint,
CopyPackageManifest,
InitializeBuiltinFileCache,
@@ -17,7 +21,7 @@ namespace YooAsset
private readonly BuiltinFileSystem _fileSystem;
private FCInitializeOperation _initializeBuiltinFileCacheOp;
private FCInitializeOperation _initializeUnpackFileCacheOp;
- private CopyBuiltinPackageManifest _copyBuiltinPackageManifestOp;
+ private CopyBuiltinPackageManifestOperation _copyBuiltinPackageManifestOp;
private ESteps _steps = ESteps.None;
internal BFSInitializeOperation(BuiltinFileSystem fileSystem)
@@ -26,52 +30,60 @@ namespace YooAsset
}
internal override void InternalStart()
{
-#if UNITY_WEBGL
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"{nameof(DefaultBuildinFileSystem)} is not support WEBGL platform.";
-#else
- _steps = ESteps.CheckAppFootprint;
-#endif
+ _steps = ESteps.CheckPlatform;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.CheckPlatform)
+ {
+#if UNITY_WEBGL
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(BuiltinFileSystem)} does not support the WebGL platform.";
+#else
+ _steps = ESteps.CheckAppFootprint;
+#endif
+ }
+
if (_steps == ESteps.CheckAppFootprint)
{
- string footprintFilePath = _fileSystem.GetSandboxAppFootPrintFilePath();
+ string footprintFilePath = _fileSystem.GetSandboxAppFootprintFilePath();
var appFootprint = new ApplicationFootprint(footprintFilePath);
appFootprint.Load(_fileSystem.PackageName);
// 如果水印发生变化,则说明覆盖安装后首次打开游戏
if (appFootprint.IsDirty())
{
- if (_fileSystem.InstallClearMode == EInstallCleanupMode.None)
+ if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.None)
{
- YooLogger.Warning("Do nothing when overwrite install application.");
+ YooLogger.Warning("No action required on overwrite installation.");
}
- else if (_fileSystem.InstallClearMode == EInstallCleanupMode.ClearAllCacheFiles)
+ else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllCacheFiles)
{
_fileSystem.DeleteAllBundleFiles();
- YooLogger.Warning("Delete all cache files when overwrite install application.");
+ _fileSystem.DeleteAllManifestFiles();
+ _fileSystem.DeleteAllTempFIles();
+ YooLogger.Warning("Deleted all cache files on overwrite installation.");
}
- else if (_fileSystem.InstallClearMode == EInstallCleanupMode.ClearAllBundleFiles)
+ else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllBundleFiles)
{
_fileSystem.DeleteAllBundleFiles();
- YooLogger.Warning("Delete all bundle files when overwrite install application.");
+ YooLogger.Warning("Deleted all bundle files on overwrite installation.");
}
- else if (_fileSystem.InstallClearMode == EInstallCleanupMode.ClearAllManifestFiles)
+ else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllManifestFiles)
{
- YooLogger.Warning("Do nothing when overwrite install application.");
+ _fileSystem.DeleteAllManifestFiles();
+ YooLogger.Warning("Deleted all manifest files on overwrite installation.");
}
else
{
- throw new System.NotImplementedException(_fileSystem.InstallClearMode.ToString());
+ throw new System.NotImplementedException(_fileSystem.InstallCleanupMode.ToString());
}
- appFootprint.Coverage(_fileSystem.PackageName);
+ appFootprint.Overwrite(_fileSystem.PackageName);
}
_steps = ESteps.CopyPackageManifest;
@@ -79,11 +91,11 @@ namespace YooAsset
if (_steps == ESteps.CopyPackageManifest)
{
- if (_fileSystem.CopyBuildinPackageManifest)
+ if (_fileSystem.CopyBuiltinPackageManifest)
{
if (_copyBuiltinPackageManifestOp == null)
{
- _copyBuiltinPackageManifestOp = new CopyBuiltinPackageManifest(_fileSystem);
+ _copyBuiltinPackageManifestOp = new CopyBuiltinPackageManifestOperation(_fileSystem);
_copyBuiltinPackageManifestOp.StartOperation();
AddChildOperation(_copyBuiltinPackageManifestOp);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadBundleOperation.cs
deleted file mode 100644
index 390dc9b8..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadBundleOperation.cs
+++ /dev/null
@@ -1,308 +0,0 @@
-
-namespace YooAsset
-{
- internal class BFSLoadBundleOperation : FSLoadBundleOperation
- {
- private enum ESteps
- {
- None,
- Prepare,
- UnpackFile,
- AbortUnpack,
- LoadUnpackBundle,
- LoadBuiltinBundle,
- CheckResult,
- Done,
- }
-
- private readonly BuiltinFileSystem _fileSystem;
- private readonly FCLoadBundleOptions _options;
- private FSDownloadFileOperation _unpackFileOp;
- private FCLoadBundleOperation _loadBundleOp;
- private ESteps _steps = ESteps.None;
-
- internal BFSLoadBundleOperation(BuiltinFileSystem fileSystem, FCLoadBundleOptions options)
- {
- _fileSystem = fileSystem;
- _options = options;
- }
- internal override void InternalStart()
- {
- _steps = ESteps.Prepare;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.Prepare)
- {
- if (_fileSystem.IsUnpackBundleFile(_options.Bundle))
- {
- if (_fileSystem.UnpackFileCache.IsCached(_options.Bundle.BundleGUID))
- {
- DownloadProgress = 1f;
- DownloadedBytes = _options.Bundle.FileSize;
- _steps = ESteps.LoadUnpackBundle;
- }
- else
- {
- _steps = ESteps.UnpackFile;
- }
- }
- else
- {
- DownloadProgress = 1f;
- DownloadedBytes = _options.Bundle.FileSize;
- _steps = ESteps.LoadBuiltinBundle;
- }
- }
-
- if (_steps == ESteps.UnpackFile)
- {
- // 中断解压
- if (AbortDownloadFile)
- {
- if (_unpackFileOp != null)
- _unpackFileOp.AbortOperation();
- _steps = ESteps.AbortUnpack;
- }
- }
-
- if (_steps == ESteps.UnpackFile)
- {
- if (_unpackFileOp == null)
- {
- var options = new FSDownloadFileOptions(_options.Bundle, int.MaxValue);
- _unpackFileOp = _fileSystem.DownloadFileAsync(options); // 注意:异步任务的开启由调度器统一控制
- AddChildOperation(_unpackFileOp);
- }
-
- if (IsWaitForCompletion)
- _unpackFileOp.WaitForCompletion();
-
- _unpackFileOp.UpdateOperation();
- DownloadProgress = _unpackFileOp.DownloadProgress;
- DownloadedBytes = _unpackFileOp.DownloadedBytes;
- if (_unpackFileOp.IsDone == false)
- return;
-
- if (_unpackFileOp.Status == EOperationStatus.Succeeded)
- {
- _steps = ESteps.LoadUnpackBundle;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _unpackFileOp.Error;
- }
- }
-
- if (_steps == ESteps.AbortUnpack)
- {
- if (_unpackFileOp != null)
- {
- if (IsWaitForCompletion)
- _unpackFileOp.WaitForCompletion();
-
- _unpackFileOp.UpdateOperation();
- if (_unpackFileOp.IsDone == false)
- return;
- }
-
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Abort download file.";
- }
-
- if (_steps == ESteps.LoadUnpackBundle)
- {
- _loadBundleOp = _fileSystem.UnpackFileCache.LoadBundleAsync(_options);
- _loadBundleOp.StartOperation();
- AddChildOperation(_loadBundleOp);
- _steps = ESteps.CheckResult;
- }
-
- if (_steps == ESteps.LoadBuiltinBundle)
- {
- _loadBundleOp = _fileSystem.BuiltinFileCache.LoadBundleAsync(_options);
- _loadBundleOp.StartOperation();
- AddChildOperation(_loadBundleOp);
- _steps = ESteps.CheckResult;
- }
-
- if (_steps == ESteps.CheckResult)
- {
- if (IsWaitForCompletion)
- _loadBundleOp.WaitForCompletion();
-
- _loadBundleOp.UpdateOperation();
- if (_loadBundleOp.IsDone == false)
- return;
-
- if (_loadBundleOp.Status == EOperationStatus.Succeeded)
- {
- if (_loadBundleOp.BundleResult == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Loaded bundle result is null.";
- YooLogger.Error(Error);
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeeded;
- Result = _loadBundleOp.BundleResult;
- }
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _loadBundleOp.Error;
- YooLogger.Error(Error);
- }
- }
- }
- internal override void InternalWaitForCompletion()
- {
- ExecuteBatch();
- }
- }
-
-#if TUANJIE_1_7_OR_NEWER
- ///
- /// 加载团结文件
- ///
- internal class BFSLoadInstantBundleOperation
- {
- private enum ESteps
- {
- None,
- LoadInstantBundle,
- CheckResult,
- Done,
- }
-
- private readonly DefaultBuildinFileSystem _fileSystem;
- private readonly PackageBundle _bundle;
- private AssetBundleCreateRequest _createRequest;
- private AssetBundle _assetBundle;
- private Stream _managedStream;
- private ESteps _steps = ESteps.None;
-
-
- internal BFSLoadInstantBundleOperation(DefaultBuildinFileSystem fileSystem, PackageBundle bundle)
- {
- _fileSystem = fileSystem;
- _bundle = bundle;
- }
- internal override void InternalStart()
- {
- DownloadProgress = 1f;
- DownloadedBytes = _bundle.FileSize;
- _steps = ESteps.LoadInstantBundle;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.LoadInstantBundle)
- {
- if (_bundle.Encrypted)
- {
- if (_fileSystem.DecryptionServices == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"The {nameof(IDecryptionServices)} is null.";
- YooLogger.Error(Error);
- return;
- }
- }
-
- if (IsWaitingForAsyncComplete)
- {
- if (_bundle.Encrypted)
- {
- var decryptResult = _fileSystem.LoadEncryptedAssetBundle(_bundle);
- _assetBundle = decryptResult.Result;
- _managedStream = decryptResult.ManagedStream;
- }
- else
- {
- string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle);
- _assetBundle = AssetBundle.LoadFromFile(filePath);
- }
- }
- else
- {
- if (_bundle.Encrypted)
- {
- var decryptResult = _fileSystem.LoadEncryptedAssetBundleAsync(_bundle);
- _createRequest = decryptResult.CreateRequest;
- _managedStream = decryptResult.ManagedStream;
- }
- else
- {
- string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle);
- _createRequest = AssetBundle.LoadFromFileAsync(filePath);
- }
- }
-
- _steps = ESteps.CheckResult;
- }
-
- if (_steps == ESteps.CheckResult)
- {
- if (_createRequest != null)
- {
- if (IsWaitingForAsyncComplete)
- {
- // 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity bundle.");
- _assetBundle = _createRequest.assetBundle;
- }
- else
- {
- if (_createRequest.isDone == false)
- return;
- _assetBundle = _createRequest.assetBundle;
- }
- }
-
- if (_assetBundle == null)
- {
- if (_bundle.Encrypted)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Failed to load encrypted buildin asset bundle file : {_bundle.BundleName}";
- YooLogger.Error(Error);
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Failed to load buildin asset bundle file : {_bundle.BundleName}";
- YooLogger.Error(Error);
- }
- }
- else
- {
- _steps = ESteps.Done;
- Result = new AssetBundleResult(_fileSystem, _bundle, _assetBundle, _managedStream);
- Status = EOperationStatus.Succeed;
- }
- }
- }
- internal override void InternalWaitForAsyncComplete()
- {
- RunBatchExecution();
- }
- }
-#endif
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageBundleOperation.cs
new file mode 100644
index 00000000..1700d560
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageBundleOperation.cs
@@ -0,0 +1,169 @@
+
+namespace YooAsset
+{
+ ///
+ /// 内置文件系统的加载资源包操作
+ ///
+ internal class BFSLoadPackageBundleOperation : FSLoadPackageBundleOperation
+ {
+ private enum ESteps
+ {
+ None,
+ Prepare,
+ UnpackFile,
+ AbortUnpack,
+ LoadUnpackBundle,
+ LoadBundle,
+ CheckResult,
+ Done,
+ }
+
+ private readonly BuiltinFileSystem _fileSystem;
+ private readonly FSLoadPackageBundleOptions _options;
+ private FSDownloadFileOperation _unpackFileOp;
+ private FCLoadBundleOperation _loadBundleOp;
+ private ESteps _steps = ESteps.None;
+
+ internal BFSLoadPackageBundleOperation(BuiltinFileSystem fileSystem, FSLoadPackageBundleOptions options)
+ {
+ _fileSystem = fileSystem;
+ _options = options;
+ }
+ internal override void InternalStart()
+ {
+ _steps = ESteps.Prepare;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.Prepare)
+ {
+ if (_fileSystem.IsUnpackBundleFile(_options.Bundle))
+ {
+ if (_fileSystem.UnpackFileCache.IsCached(_options.Bundle.BundleGUID))
+ _steps = ESteps.LoadUnpackBundle;
+ else
+ _steps = ESteps.UnpackFile;
+ }
+ else
+ {
+ _steps = ESteps.LoadBundle;
+ }
+ }
+
+ if (_steps == ESteps.UnpackFile)
+ {
+ // 中断解压
+ if (AbortDownloadFile)
+ {
+ if (_unpackFileOp != null)
+ _unpackFileOp.AbortOperation();
+ _steps = ESteps.AbortUnpack;
+ }
+ }
+
+ if (_steps == ESteps.UnpackFile)
+ {
+ if (_unpackFileOp == null)
+ {
+ // 注意:内置文件解压不做失败尝试
+ var options = new FSDownloadFileOptions(_options.Bundle, 0);
+ _unpackFileOp = _fileSystem.DownloadFileAsync(options);
+ _unpackFileOp.StartOperation();
+ AddChildOperation(_unpackFileOp);
+ }
+
+ if (IsWaitForCompletion)
+ _unpackFileOp.WaitForCompletion();
+
+ _unpackFileOp.UpdateOperation();
+ if (_unpackFileOp.IsDone == false)
+ return;
+
+ if (_unpackFileOp.Status == EOperationStatus.Succeeded)
+ {
+ _steps = ESteps.LoadUnpackBundle;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _unpackFileOp.Error;
+ }
+ }
+
+ if (_steps == ESteps.AbortUnpack)
+ {
+ if (_unpackFileOp != null)
+ {
+ if (IsWaitForCompletion)
+ _unpackFileOp.WaitForCompletion();
+
+ _unpackFileOp.UpdateOperation();
+ if (_unpackFileOp.IsDone == false)
+ return;
+ }
+
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "File download aborted.";
+ }
+
+ if (_steps == ESteps.LoadUnpackBundle)
+ {
+ _loadBundleOp = _fileSystem.UnpackFileCache.LoadBundleAsync(_options.ConvertTo());
+ _loadBundleOp.StartOperation();
+ AddChildOperation(_loadBundleOp);
+ _steps = ESteps.CheckResult;
+ }
+
+ if (_steps == ESteps.LoadBundle)
+ {
+ _loadBundleOp = _fileSystem.BuiltinFileCache.LoadBundleAsync(_options.ConvertTo());
+ _loadBundleOp.StartOperation();
+ AddChildOperation(_loadBundleOp);
+ _steps = ESteps.CheckResult;
+ }
+
+ if (_steps == ESteps.CheckResult)
+ {
+ if (IsWaitForCompletion)
+ _loadBundleOp.WaitForCompletion();
+
+ _loadBundleOp.UpdateOperation();
+ if (_loadBundleOp.IsDone == false)
+ return;
+
+ if (_loadBundleOp.Status == EOperationStatus.Succeeded)
+ {
+ if (_loadBundleOp.BundleHandle == null)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "Loaded bundle handle is null.";
+ YooLogger.Error(Error);
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ BundleHandle = _loadBundleOp.BundleHandle;
+ }
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _loadBundleOp.Error;
+ YooLogger.Error(Error);
+ }
+ }
+ }
+ internal override void InternalWaitForCompletion()
+ {
+ ExecuteBatch();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageManifestOperation.cs
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageManifestOperation.cs
index 2cb9d00e..8ebdd3ff 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageManifestOperation.cs
@@ -1,13 +1,16 @@
-
+
namespace YooAsset
{
- internal class BFSLoadManifestOperation : FSLoadManifestOperation
+ ///
+ /// 内置文件系统的加载包裹清单操作
+ ///
+ internal class BFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
None,
- RequestBuiltinPackageHash,
- LoadBuiltinPackageManifest,
+ RequestPackageHash,
+ LoadPackageManifest,
Done,
}
@@ -18,21 +21,21 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- public BFSLoadManifestOperation(BuiltinFileSystem fileSystem, string packageVersion)
+ public BFSLoadPackageManifestOperation(BuiltinFileSystem fileSystem, string packageVersion)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
}
internal override void InternalStart()
{
- _steps = ESteps.RequestBuiltinPackageHash;
+ _steps = ESteps.RequestPackageHash;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.RequestBuiltinPackageHash)
+ if (_steps == ESteps.RequestPackageHash)
{
if (_requestBuiltinPackageHashOp == null)
{
@@ -47,7 +50,7 @@ namespace YooAsset
if (_requestBuiltinPackageHashOp.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadBuiltinPackageManifest;
+ _steps = ESteps.LoadPackageManifest;
}
else
{
@@ -57,7 +60,7 @@ namespace YooAsset
}
}
- if (_steps == ESteps.LoadBuiltinPackageManifest)
+ if (_steps == ESteps.LoadPackageManifest)
{
if (_loadBuiltinPackageManifestOp == null)
{
@@ -74,8 +77,8 @@ namespace YooAsset
if (_loadBuiltinPackageManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _loadBuiltinPackageManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
+ Manifest = _loadBuiltinPackageManifestOp.Manifest;
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestPackageVersionOperation.cs
similarity index 87%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestPackageVersionOperation.cs
index 441f6dec..20104b4e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class BFSRequestVersionOperation : FSRequestVersionOperation
+ ///
+ /// 内置文件系统的查询包裹版本操作
+ ///
+ internal class BFSRequestPackageVersionOperation : FSRequestPackageVersionOperation
{
private enum ESteps
{
@@ -15,7 +18,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- internal BFSRequestVersionOperation(BuiltinFileSystem fileSystem)
+ internal BFSRequestPackageVersionOperation(BuiltinFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/BFSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinPackageManifest.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/Internal/CopyBuiltinPackageManifestOperation.cs
similarity index 80%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinPackageManifest.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/Internal/CopyBuiltinPackageManifestOperation.cs
index 07529125..3d88063c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinPackageManifest.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/Internal/CopyBuiltinPackageManifestOperation.cs
@@ -1,7 +1,10 @@
namespace YooAsset
{
- internal class CopyBuiltinPackageManifest : AsyncOperationBase
+ ///
+ /// 拷贝内置包裹清单到沙盒操作
+ ///
+ internal class CopyBuiltinPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
{
@@ -13,12 +16,12 @@ namespace YooAsset
}
private readonly BuiltinFileSystem _fileSystem;
- private RequestBuiltinPackageVersionOperation _requestBuildinPackageVersionOp;
+ private RequestBuiltinPackageVersionOperation _requestBuiltinPackageVersionOp;
private CopyBuiltinFileOperation _copyBuiltinHashFileOp;
private CopyBuiltinFileOperation _copyBuiltinManifestFileOp;
private ESteps _steps = ESteps.None;
- public CopyBuiltinPackageManifest(BuiltinFileSystem fileSystem)
+ public CopyBuiltinPackageManifestOperation(BuiltinFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
@@ -33,18 +36,18 @@ namespace YooAsset
if (_steps == ESteps.LoadBuiltinPackageVersion)
{
- if (_requestBuildinPackageVersionOp == null)
+ if (_requestBuiltinPackageVersionOp == null)
{
- _requestBuildinPackageVersionOp = new RequestBuiltinPackageVersionOperation(_fileSystem);
- _requestBuildinPackageVersionOp.StartOperation();
- AddChildOperation(_requestBuildinPackageVersionOp);
+ _requestBuiltinPackageVersionOp = new RequestBuiltinPackageVersionOperation(_fileSystem);
+ _requestBuiltinPackageVersionOp.StartOperation();
+ AddChildOperation(_requestBuiltinPackageVersionOp);
}
- _requestBuildinPackageVersionOp.UpdateOperation();
- if (_requestBuildinPackageVersionOp.IsDone == false)
+ _requestBuiltinPackageVersionOp.UpdateOperation();
+ if (_requestBuiltinPackageVersionOp.IsDone == false)
return;
- if (_requestBuildinPackageVersionOp.Status == EOperationStatus.Succeeded)
+ if (_requestBuiltinPackageVersionOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.CopyBuiltinPackageHash;
}
@@ -52,7 +55,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _requestBuildinPackageVersionOp.Error;
+ Error = _requestBuiltinPackageVersionOp.Error;
}
}
@@ -60,7 +63,8 @@ namespace YooAsset
{
if (_copyBuiltinHashFileOp == null)
{
- string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
+ // 注意:只负责拷贝文件,不负责校验文件。
+ string packageVersion = _requestBuiltinPackageVersionOp.PackageVersion;
string destFilePath = GetCopyPackageHashDestPath(packageVersion);
string sourceFilePath = _fileSystem.GetBuiltinPackageHashFilePath(packageVersion);
_copyBuiltinHashFileOp = new CopyBuiltinFileOperation(_fileSystem, sourceFilePath, destFilePath);
@@ -88,7 +92,8 @@ namespace YooAsset
{
if (_copyBuiltinManifestFileOp == null)
{
- string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
+ // 注意:只负责拷贝文件,不负责校验文件。
+ string packageVersion = _requestBuiltinPackageVersionOp.PackageVersion;
string destFilePath = GetCopyPackageManifestDestPath(packageVersion);
string sourceFilePath = _fileSystem.GetBuiltinPackageManifestFilePath(packageVersion);
_copyBuiltinManifestFileOp = new CopyBuiltinFileOperation(_fileSystem, sourceFilePath, destFilePath);
@@ -116,11 +121,11 @@ namespace YooAsset
private string GetCopyManifestFileRoot()
{
- string destRoot = _fileSystem.CopyBuildinPackageManifestDestRoot;
+ string destRoot = _fileSystem.CopyBuiltinPackageManifestDestRoot;
if (string.IsNullOrEmpty(destRoot))
{
string defaultCacheRoot = YooAssetSettingsData.GetYooDefaultCacheRoot();
- destRoot = PathUtility.Combine(defaultCacheRoot, _fileSystem.PackageName, SandboxFileSystemDefine.ManifestFilesFolderName);
+ destRoot = PathUtility.Combine(defaultCacheRoot, _fileSystem.PackageName, SandboxFileSystemConsts.ManifestFilesFolderName);
}
return destRoot;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinPackageManifest.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/Internal/CopyBuiltinPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinPackageManifest.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/Internal/CopyBuiltinPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinFileOperation.cs
index 3b51b3ba..165aca10 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/CopyBuiltinFileOperation.cs
@@ -3,6 +3,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 拷贝内置文件操作
+ ///
internal class CopyBuiltinFileOperation : AsyncOperationBase
{
private enum ESteps
@@ -17,7 +20,7 @@ namespace YooAsset
private readonly BuiltinFileSystem _fileSystem;
private readonly string _sourceFilePath;
private readonly string _destFilePath;
- private IDownloadFileRequest _webFileRequestOp;
+ private IDownloadFileRequest _downloadFileRequest;
private ESteps _steps = ESteps.None;
public CopyBuiltinFileOperation(BuiltinFileSystem fileSystem, string sourceFilePath, string destFilePath)
@@ -63,7 +66,7 @@ namespace YooAsset
}
catch (Exception ex)
{
- YooLogger.Warning($"Failed copy buildin file : {ex.Message}");
+ YooLogger.Warning($"Failed to copy builtin file: {ex.Message}");
_steps = ESteps.UnpackFile;
}
}
@@ -75,19 +78,19 @@ namespace YooAsset
if (_steps == ESteps.UnpackFile)
{
- if (_webFileRequestOp == null)
+ if (_downloadFileRequest == null)
{
//TODO 团结引擎,在某些安卓机型(红米),通过UnityWebRequest拷贝包内文件会小概率失败!需要借助其它方式来拷贝包内文件。
string url = DownloadSystemTools.ToLocalUrl(_sourceFilePath);
var args = new DownloadFileRequestArgs(url, _destFilePath, 60, 0);
- _webFileRequestOp = _fileSystem.DownloadBackend.CreateFileRequest(args);
- _webFileRequestOp.SendRequest();
+ _downloadFileRequest = _fileSystem.DownloadBackend.CreateFileRequest(args);
+ _downloadFileRequest.SendRequest();
}
- if (_webFileRequestOp.IsDone == false)
+ if (_downloadFileRequest.IsDone == false)
return;
- if (_webFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
@@ -96,16 +99,16 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webFileRequestOp.Error;
+ Error = _downloadFileRequest.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webFileRequestOp != null)
+ if (_downloadFileRequest != null)
{
- _webFileRequestOp.Dispose();
- _webFileRequestOp = null;
+ _downloadFileRequest.Dispose();
+ _downloadFileRequest = null;
}
}
internal override void InternalWaitForCompletion()
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/LoadBuiltinPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/LoadBuiltinPackageManifestOperation.cs
index a8ae6f6b..d5e01e3f 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/LoadBuiltinPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/LoadBuiltinPackageManifestOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载内置包裹清单文件操作
+ ///
internal class LoadBuiltinPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -17,15 +20,15 @@ namespace YooAsset
private readonly BuiltinFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly string _packageHash;
- private IDownloadBytesRequest _webDataRequestOp;
- private DeserializeManifestOperation _deserializer;
+ private IDownloadBytesRequest _downloadBytesRequest;
+ private DeserializeManifestOperation _deserializeManifestOp;
private byte[] _fileData;
private ESteps _steps = ESteps.None;
///
/// 包裹清单
///
- public PackageManifest Manifest { private set; get; }
+ public PackageManifest Manifest { get; private set; }
internal LoadBuiltinPackageManifestOperation(BuiltinFileSystem fileSystem, string packageVersion, string packageHash)
@@ -59,28 +62,28 @@ namespace YooAsset
if (_steps == ESteps.RequestFileData)
{
- if (_webDataRequestOp == null)
+ if (_downloadBytesRequest == null)
{
string filePath = _fileSystem.GetBuiltinPackageManifestFilePath(_packageVersion);
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, 60, 0);
- _webDataRequestOp = _fileSystem.DownloadBackend.CreateBytesRequest(args);
- _webDataRequestOp.SendRequest();
+ _downloadBytesRequest = _fileSystem.DownloadBackend.CreateBytesRequest(args);
+ _downloadBytesRequest.SendRequest();
}
- if (_webDataRequestOp.IsDone == false)
+ if (_downloadBytesRequest.IsDone == false)
return;
- if (_webDataRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadBytesRequest.Status == EDownloadRequestStatus.Succeeded)
{
- _fileData = _webDataRequestOp.Result;
+ _fileData = _downloadBytesRequest.Result;
_steps = ESteps.VerifyFileData;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webDataRequestOp.Error;
+ Error = _downloadBytesRequest.Error;
}
}
@@ -94,49 +97,49 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Failed to verify buildin package manifest file.";
+ Error = "Failed to verify builtin package manifest file.";
}
}
if (_steps == ESteps.LoadManifest)
{
- if (_deserializer == null)
+ if (_deserializeManifestOp == null)
{
- _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _fileData);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
+ _deserializeManifestOp = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _fileData);
+ _deserializeManifestOp.StartOperation();
+ AddChildOperation(_deserializeManifestOp);
}
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
+ _deserializeManifestOp.UpdateOperation();
+ Progress = _deserializeManifestOp.Progress;
+ if (_deserializeManifestOp.IsDone == false)
return;
- if (_deserializer.Status == EOperationStatus.Succeeded)
+ if (_deserializeManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
+ Manifest = _deserializeManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
+ Error = _deserializeManifestOp.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webDataRequestOp != null)
+ if (_downloadBytesRequest != null)
{
- _webDataRequestOp.Dispose();
- _webDataRequestOp = null;
+ _downloadBytesRequest.Dispose();
+ _downloadBytesRequest = null;
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
+ return $"PackageVersion: {_packageVersion} PackageHash: {_packageHash}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageHashOperation.cs
index d3ed542a..7a383ceb 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageHashOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 请求内置包裹哈希操作
+ ///
internal class RequestBuiltinPackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -15,13 +18,13 @@ namespace YooAsset
private readonly BuiltinFileSystem _fileSystem;
private readonly string _packageVersion;
- private IDownloadTextRequest _webTextRequestOp;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹哈希值
///
- public string PackageHash { private set; get; }
+ public string PackageHash { get; private set; }
internal RequestBuiltinPackageHashOperation(BuiltinFileSystem fileSystem, string packageVersion)
@@ -54,38 +57,38 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageHash)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string filePath = _fileSystem.GetBuiltinPackageHashFilePath(_packageVersion);
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, 60, 0);
- _webTextRequestOp = _fileSystem.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _fileSystem.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- if (_webTextRequestOp.IsDone == false)
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageHash = _webTextRequestOp.Result;
+ PackageHash = _downloadTextRequest.Result;
_steps = ESteps.CheckResult;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
+ Error = _downloadTextRequest.Error;
}
}
if (_steps == ESteps.CheckResult)
{
- if (string.IsNullOrEmpty(PackageHash))
+ if (TextUtility.ValidateContent(PackageHash, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Builtin package hash file content is empty.";
+ Error = $"Builtin package hash file validate failed: {validateError}";
}
else
{
@@ -96,10 +99,10 @@ namespace YooAsset
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageVersionOperation.cs
index 970492a4..b4069837 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/RequestBuiltinPackageVersionOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 请求内置包裹版本操作
+ ///
internal class RequestBuiltinPackageVersionOperation : AsyncOperationBase
{
private enum ESteps
@@ -14,13 +17,13 @@ namespace YooAsset
}
private readonly BuiltinFileSystem _fileSystem;
- private IDownloadTextRequest _webTextRequestOp;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹版本
///
- public string PackageVersion { private set; get; }
+ public string PackageVersion { get; private set; }
internal RequestBuiltinPackageVersionOperation(BuiltinFileSystem fileSystem)
@@ -52,38 +55,38 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string filePath = _fileSystem.GetBuiltinPackageVersionFilePath();
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, 60, 0);
- _webTextRequestOp = _fileSystem.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _fileSystem.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- if (_webTextRequestOp.IsDone == false)
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageVersion = _webTextRequestOp.Result;
+ PackageVersion = _downloadTextRequest.Result;
_steps = ESteps.CheckResult;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
+ Error = _downloadTextRequest.Error;
}
}
if (_steps == ESteps.CheckResult)
{
- if (string.IsNullOrEmpty(PackageVersion))
+ if (TextUtility.ValidateContent(PackageVersion, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Builtin package version file content is empty.";
+ Error = $"Builtin package version file validate failed: {validateError}";
}
else
{
@@ -94,10 +97,10 @@ namespace YooAsset
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/UnpackAndCacheFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/UnpackAndCacheFileOperation.cs
index 7eaee322..6d2fa64d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/UnpackAndCacheFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/BuiltinFileSystem/Operations/internal/UnpackAndCacheFileOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 解压并缓存文件操作
+ ///
internal sealed class UnpackAndCacheFileOperation : DownloadFileBaseOperation
{
private enum ESteps
@@ -65,6 +68,10 @@ namespace YooAsset
if (_copyBuiltinFileOp.IsDone == false)
return;
+ // 更新下载报告
+ Report.DownloadedBytes = Bundle.FileSize;
+ Report.DownloadProgress = 1f;
+
if (_copyBuiltinFileOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.CacheFile;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystem.cs
index 79301432..3e4e1dde 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystem.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using UnityEngine;
namespace YooAsset
@@ -13,67 +13,70 @@ namespace YooAsset
///
/// 虚拟文件缓存系统
///
- public IFileCache FileCache { private set; get; }
+ public IFileCache FileCache { get; private set; }
///
- /// 解压调度器
+ /// 下载调度器
///
public DownloadSchedulerOperation DownloadScheduler { get; set; }
///
/// 下载后台接口
///
- public IDownloadBackend DownloadBackend { private set; get; }
+ public IDownloadBackend DownloadBackend { get; private set; }
///
/// 包裹名称
///
- public string PackageName { private set; get; }
+ public string PackageName { get; private set; }
#region 自定义参数
///
/// 自定义参数:UnityWebRequest 创建委托
///
- public UnityWebRequestCreator WebRequestCreator { private set; get; }
+ public UnityWebRequestCreator WebRequestCreator { get; private set; }
///
/// 自定义参数:模拟WebGL平台模式
///
- public bool VirtualWebGLMode { private set; get; } = false;
+ public bool VirtualWebGLMode { get; private set; } = false;
///
/// 自定义参数:模拟虚拟下载模式
///
- public bool VirtualDownloadMode { private set; get; } = false;
+ public bool VirtualDownloadMode { get; private set; } = false;
///
/// 自定义参数:模拟虚拟下载的网速(单位:字节)
+ /// 默认值:1024
///
- public int VirtualDownloadSpeed { private set; get; } = 1024;
+ public int VirtualDownloadSpeed { get; private set; } = 1024;
///
/// 自定义参数:最大并发连接数
/// 默认值:8(推荐范围 1-32)
/// 说明:过大的并发数可能被服务器限流,也会增加本地资源消耗
///
- public int DownloadMaxConcurrency { private set; get; } = 8;
+ public int DownloadMaxConcurrency { get; private set; } = 8;
///
/// 自定义参数:每帧发起的最大请求数
/// 默认值:8(推荐范围 1-32)
/// 说明:避免单帧发起过多请求导致卡顿
///
- public int DownloadMaxRequestPerFrame { private set; get; } = 8;
+ public int DownloadMaxRequestPerFrame { get; private set; } = 8;
///
/// 自定义参数:异步模拟加载最小帧数
+ /// 默认值:1
///
- public int AsyncSimulateMinFrame { private set; get; } = 1;
+ public int AsyncSimulateMinFrame { get; private set; } = 1;
///
/// 自定义参数:异步模拟加载最大帧数
+ /// 默认值:1
///
- public int AsyncSimulateMaxFrame { private set; get; } = 1;
+ public int AsyncSimulateMaxFrame { get; private set; } = 1;
#endregion
public EditorFileSystem()
@@ -84,19 +87,19 @@ namespace YooAsset
var operation = new EFSInitializeOperation(this);
return operation;
}
- public virtual FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options)
{
- var operation = new EFSRequestVersionOperation(this);
+ var operation = new EFSRequestPackageVersionOperation(this);
return operation;
}
- public virtual FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options)
{
- var operation = new EFSLoadManifestOperation(this, options.PackageVersion);
+ var operation = new EFSLoadPackageManifestOperation(this, options.PackageVersion);
return operation;
}
- public virtual FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options)
{
- var operation = new FSClearCacheCompleteOperation();
+ var operation = new EFSLoadPackageBundleOperation(this, options);
return operation;
}
public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
@@ -104,35 +107,48 @@ namespace YooAsset
var downloader = new EFSDownloadFileOperation(this, options);
return downloader;
}
- public virtual FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options)
+ public virtual FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options)
{
- var operation = new EFSLoadBundleOperation(this, options);
- return operation;
+ if (options.ClearMode == EManifestClearMode.ClearAllManifestFiles.ToString())
+ {
+ var operation = new FSClearCacheCompleteOperation();
+ return operation;
+ }
+ else if (options.ClearMode == EManifestClearMode.ClearUnusedManifestFiles.ToString())
+ {
+ var operation = new FSClearCacheCompleteOperation();
+ return operation;
+ }
+ else
+ {
+ var operation = new EFSClearCacheOperation(this, options);
+ return operation;
+ }
}
public virtual void SetParameter(string name, object value)
{
- if (name == FileSystemParametersDefine.DOWNLOAD_BACKEND)
+ if (name == FileSystemConsts.DOWNLOAD_BACKEND)
{
DownloadBackend = (IDownloadBackend)value;
}
- else if (name == FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR)
+ else if (name == FileSystemConsts.UNITY_WEB_REQUEST_CREATOR)
{
WebRequestCreator = (UnityWebRequestCreator)value;
}
- else if (name == FileSystemParametersDefine.VIRTUAL_WEBGL_MODE)
+ else if (name == FileSystemConsts.VIRTUAL_WEBGL_MODE)
{
VirtualWebGLMode = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.VIRTUAL_DOWNLOAD_MODE)
+ else if (name == FileSystemConsts.VIRTUAL_DOWNLOAD_MODE)
{
VirtualDownloadMode = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.VIRTUAL_DOWNLOAD_SPEED)
+ else if (name == FileSystemConsts.VIRTUAL_DOWNLOAD_SPEED)
{
VirtualDownloadSpeed = Convert.ToInt32(value);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_CONCURRENCY)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_CONCURRENCY)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -143,7 +159,7 @@ namespace YooAsset
// 限制在合理范围内:1-32
DownloadMaxConcurrency = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_REQUEST_PER_FRAME)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_REQUEST_PER_FRAME)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -154,17 +170,17 @@ namespace YooAsset
// 限制在合理范围内:1-32
DownloadMaxRequestPerFrame = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.ASYNC_SIMULATE_MIN_FRAME)
+ else if (name == FileSystemConsts.ASYNC_SIMULATE_MIN_FRAME)
{
AsyncSimulateMinFrame = Convert.ToInt32(value);
}
- else if (name == FileSystemParametersDefine.ASYNC_SIMULATE_MAX_FRAME)
+ else if (name == FileSystemConsts.ASYNC_SIMULATE_MAX_FRAME)
{
AsyncSimulateMaxFrame = Convert.ToInt32(value);
}
else
{
- YooLogger.Warning($"Invalid parameter : {name}");
+ YooLogger.Warning($"Invalid parameter: {name}");
}
}
public virtual void OnCreate(string packageName, string packageRoot)
@@ -200,7 +216,7 @@ namespace YooAsset
if (DownloadScheduler != null)
{
- DownloadScheduler.Dispose();
+ DownloadScheduler.AbortOperation();
DownloadScheduler = null;
}
@@ -232,16 +248,27 @@ namespace YooAsset
}
#region 内部方法
+ ///
+ /// 获取编辑器包裹版本文件路径
+ ///
public string GetEditorPackageVersionFilePath()
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(PackageName);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取编辑器包裹哈希文件路径
+ ///
public string GetEditorPackageHashFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取编辑器包裹清单文件路径
+ ///
public string GetEditorPackageManifestFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion);
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystemTools.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystemTools.cs
index 83e3cd41..92753d64 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystemTools.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/EditorFileSystemTools.cs
@@ -1,15 +1,21 @@
-
+
namespace YooAsset
{
+ ///
+ /// 编辑器文件系统工具类
+ ///
internal static class EditorFileSystemTools
{
+ ///
+ /// 获取编辑器环境下资源包对应的源文件路径
+ ///
public static string GetEditorFilePath(PackageBundle bundle)
{
if (bundle.IncludeMainAssets.Count == 0)
return string.Empty;
- var pacakgeAsset = bundle.IncludeMainAssets[0];
- return pacakgeAsset.AssetPath;
+ var packageAsset = bundle.IncludeMainAssets[0];
+ return packageAsset.AssetPath;
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs
new file mode 100644
index 00000000..9e6c7f4a
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs
@@ -0,0 +1,62 @@
+
+namespace YooAsset
+{
+ ///
+ /// 编辑器文件系统的清理缓存操作
+ ///
+ internal class EFSClearCacheOperation : FSClearCacheOperation
+ {
+ private enum ESteps
+ {
+ None,
+ ClearCache,
+ Done,
+ }
+
+ private readonly EditorFileSystem _fileSystem;
+ private readonly FSClearCacheOptions _options;
+ private FCClearCacheOperation _clearCacheOp;
+ private ESteps _steps = ESteps.None;
+
+ internal EFSClearCacheOperation(EditorFileSystem fileSystem, FSClearCacheOptions options)
+ {
+ _fileSystem = fileSystem;
+ _options = options;
+ }
+ internal override void InternalStart()
+ {
+ _steps = ESteps.ClearCache;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.ClearCache)
+ {
+ if (_clearCacheOp == null)
+ {
+ _clearCacheOp = _fileSystem.FileCache.ClearCacheAsync(_options.ConvertTo());
+ _clearCacheOp.StartOperation();
+ AddChildOperation(_clearCacheOp);
+ }
+
+ _clearCacheOp.UpdateOperation();
+ if (_clearCacheOp.IsDone == false)
+ return;
+
+ if (_clearCacheOp.Status == EOperationStatus.Succeeded)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _clearCacheOp.Error;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs.meta
new file mode 100644
index 00000000..36e32d54
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSClearCacheOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7c7447804168ec04c8c4690db6074f2f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSDownloadFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSDownloadFileOperation.cs
index d2732c11..9c9a3a58 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSDownloadFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSDownloadFileOperation.cs
@@ -1,15 +1,17 @@
-using UnityEngine;
namespace YooAsset
{
+ ///
+ /// 编辑器文件系统的下载文件操作
+ ///
internal class EFSDownloadFileOperation : FSDownloadFileOperation
{
protected enum ESteps
{
None,
CheckExists,
- DownloadAndCache,
- TryAgain,
+ CreateDownload,
+ CheckDownload,
Done,
}
@@ -18,15 +20,10 @@ namespace YooAsset
private DownloadFileBaseOperation _downloadFileOp;
private ESteps _steps = ESteps.None;
- // 失败重试
- private float _tryAgainTimer = 0;
- private int _failedTryAgain;
-
internal EFSDownloadFileOperation(EditorFileSystem fileSystem, FSDownloadFileOptions options) : base(options.Bundle)
{
_fileSystem = fileSystem;
_options = options;
- _failedTryAgain = options.RetryCount;
}
internal override void InternalStart()
{
@@ -47,31 +44,33 @@ namespace YooAsset
}
else
{
- _steps = ESteps.DownloadAndCache;
+ _steps = ESteps.CreateDownload;
}
}
- // 下载并缓存文件
- if (_steps == ESteps.DownloadAndCache)
+ // 创建下载器
+ if (_steps == ESteps.CreateDownload)
{
+ _downloadFileOp = _fileSystem.DownloadScheduler.TryGetDownloadFile(Bundle);
if (_downloadFileOp == null)
{
- _downloadFileOp = _fileSystem.DownloadScheduler.TryGetDownloadFile(Bundle);
- if (_downloadFileOp == null)
- {
- string editorFilePath = EditorFileSystemTools.GetEditorFilePath(Bundle);
- _downloadFileOp = new SimulateAndCacheFileOperation(_fileSystem, Bundle, editorFilePath);
- _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
- }
+ string editorFilePath = EditorFileSystemTools.GetEditorFilePath(Bundle);
+ _downloadFileOp = new SimulateAndCacheFileOperation(_fileSystem, Bundle, editorFilePath);
+ _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
}
+ _steps = ESteps.CheckDownload;
+ }
+
+ // 检测结果
+ if (_steps == ESteps.CheckDownload)
+ {
if (IsWaitForCompletion)
_downloadFileOp.WaitForCompletion();
_downloadFileOp.UpdateOperation();
Progress = _downloadFileOp.Progress;
- DownloadedBytes = _downloadFileOp.DownloadedBytes;
- DownloadProgress = _downloadFileOp.DownloadProgress;
+ Report = _downloadFileOp.Report;
if (_downloadFileOp.IsDone == false)
return;
@@ -82,33 +81,10 @@ namespace YooAsset
}
else
{
- if (IsWaitForCompletion == false && _failedTryAgain > 0)
- {
- _steps = ESteps.TryAgain;
- YooLogger.Warning($"Failed download : {_downloadFileOp.Url} Try again.");
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _downloadFileOp.Error;
- YooLogger.Error(Error);
- }
- }
- }
-
- // 重新尝试下载
- if (_steps == ESteps.TryAgain)
- {
- _tryAgainTimer += Time.unscaledDeltaTime;
- if (_tryAgainTimer > 1f)
- {
- _tryAgainTimer = 0f;
- _failedTryAgain--;
- Progress = 0f;
- DownloadProgress = 0f;
- DownloadedBytes = 0;
- _steps = ESteps.DownloadAndCache;
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _downloadFileOp.Error;
+ YooLogger.Error(Error);
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSInitializeOperation.cs
index 0d584036..7e95701e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSInitializeOperation.cs
@@ -1,17 +1,20 @@
-
+
namespace YooAsset
{
+ ///
+ /// 编辑器文件系统的初始化操作
+ ///
internal class EFSInitializeOperation : FSInitializeOperation
{
private enum ESteps
{
None,
+ CheckPlatform,
InitializeFileCache,
CreateScheduler,
Done,
}
-
private readonly EditorFileSystem _fileSystem;
private FCInitializeOperation _initializeFileCacheOp;
private ESteps _steps = ESteps.None;
@@ -22,10 +25,24 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.InitializeFileCache;
+ _steps = ESteps.CheckPlatform;
}
internal override void InternalUpdate()
{
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.CheckPlatform)
+ {
+#if !UNITY_EDITOR
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(EditorFileSystem)} only support the Unity Editor.";
+#else
+ _steps = ESteps.InitializeFileCache;
+#endif
+ }
+
if (_steps == ESteps.InitializeFileCache)
{
if (_initializeFileCacheOp == null)
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageBundleOperation.cs
similarity index 78%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageBundleOperation.cs
index b68da20b..c5fe0a2e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageBundleOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class EFSLoadBundleOperation : FSLoadBundleOperation
+ ///
+ /// 编辑器文件系统的加载资源包操作
+ ///
+ internal class EFSLoadPackageBundleOperation : FSLoadPackageBundleOperation
{
private enum ESteps
{
@@ -9,18 +12,18 @@ namespace YooAsset
Prepare,
DownloadFile,
AbortDownload,
- LoadVirtualBundle,
+ LoadBundle,
CheckResult,
Done,
}
private readonly EditorFileSystem _fileSystem;
- private readonly FCLoadBundleOptions _options;
+ private readonly FSLoadPackageBundleOptions _options;
private FSDownloadFileOperation _downloadFileOp;
private FCLoadBundleOperation _loadBundleOp;
private ESteps _steps = ESteps.None;
- internal EFSLoadBundleOperation(EditorFileSystem fileSystem, FCLoadBundleOptions options)
+ internal EFSLoadPackageBundleOperation(EditorFileSystem fileSystem, FSLoadPackageBundleOptions options)
{
_fileSystem = fileSystem;
_options = options;
@@ -37,15 +40,9 @@ namespace YooAsset
if (_steps == ESteps.Prepare)
{
if (_fileSystem.FileCache.IsCached(_options.Bundle.BundleGUID))
- {
- DownloadProgress = 1f;
- DownloadedBytes = _options.Bundle.FileSize;
- _steps = ESteps.LoadVirtualBundle;
- }
+ _steps = ESteps.LoadBundle;
else
- {
_steps = ESteps.DownloadFile;
- }
}
if (_steps == ESteps.DownloadFile)
@@ -63,7 +60,8 @@ namespace YooAsset
{
if (_downloadFileOp == null)
{
- FSDownloadFileOptions options = new FSDownloadFileOptions(_options.Bundle, int.MaxValue);
+ // 注意:模拟文件下载不做失败尝试
+ var options = new FSDownloadFileOptions(_options.Bundle, 0);
_downloadFileOp = _fileSystem.DownloadFileAsync(options);
_downloadFileOp.StartOperation();
AddChildOperation(_downloadFileOp);
@@ -73,14 +71,12 @@ namespace YooAsset
_downloadFileOp.WaitForCompletion();
_downloadFileOp.UpdateOperation();
- DownloadProgress = _downloadFileOp.DownloadProgress;
- DownloadedBytes = _downloadFileOp.DownloadedBytes;
if (_downloadFileOp.IsDone == false)
return;
if (_downloadFileOp.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadVirtualBundle;
+ _steps = ESteps.LoadBundle;
}
else
{
@@ -104,12 +100,12 @@ namespace YooAsset
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Abort download file.";
+ Error = "File download aborted.";
}
- if (_steps == ESteps.LoadVirtualBundle)
+ if (_steps == ESteps.LoadBundle)
{
- _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options);
+ _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options.ConvertTo());
_loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp);
_steps = ESteps.CheckResult;
@@ -126,18 +122,18 @@ namespace YooAsset
if (_loadBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadBundleOp.BundleResult == null)
+ if (_loadBundleOp.BundleHandle == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Loaded bundle result is null.";
+ Error = "Loaded bundle handle is null.";
YooLogger.Error(Error);
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- Result = _loadBundleOp.BundleResult;
+ BundleHandle = _loadBundleOp.BundleHandle;
}
}
else
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageManifestOperation.cs
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageManifestOperation.cs
index 9d031c02..185806e8 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageManifestOperation.cs
@@ -1,13 +1,16 @@
-
+
namespace YooAsset
{
- internal class EFSLoadManifestOperation : FSLoadManifestOperation
+ ///
+ /// 编辑器文件系统的加载包裹清单操作
+ ///
+ internal class EFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
None,
- LoadEditorPackageHash,
- LoadEditorPackageManifest,
+ LoadPackageHash,
+ LoadPackageManifest,
Done,
}
@@ -18,21 +21,21 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- internal EFSLoadManifestOperation(EditorFileSystem fileSystem, string packageVersion)
+ internal EFSLoadPackageManifestOperation(EditorFileSystem fileSystem, string packageVersion)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
}
internal override void InternalStart()
{
- _steps = ESteps.LoadEditorPackageHash;
+ _steps = ESteps.LoadPackageHash;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.LoadEditorPackageHash)
+ if (_steps == ESteps.LoadPackageHash)
{
if (_loadEditorPackageHashOpe == null)
{
@@ -47,7 +50,7 @@ namespace YooAsset
if (_loadEditorPackageHashOpe.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadEditorPackageManifest;
+ _steps = ESteps.LoadPackageManifest;
}
else
{
@@ -57,7 +60,7 @@ namespace YooAsset
}
}
- if (_steps == ESteps.LoadEditorPackageManifest)
+ if (_steps == ESteps.LoadPackageManifest)
{
if (_loadEditorPackageManifestOp == null)
{
@@ -75,8 +78,8 @@ namespace YooAsset
if (_loadEditorPackageManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _loadEditorPackageManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
+ Manifest = _loadEditorPackageManifestOp.Manifest;
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestPackageVersionOperation.cs
similarity index 86%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestPackageVersionOperation.cs
index 7fee32a0..f0193f41 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class EFSRequestVersionOperation : FSRequestVersionOperation
+ ///
+ /// 编辑器文件系统的查询包裹版本操作
+ ///
+ internal class EFSRequestPackageVersionOperation : FSRequestPackageVersionOperation
{
private enum ESteps
{
@@ -15,7 +18,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- internal EFSRequestVersionOperation(EditorFileSystem fileSystem)
+ internal EFSRequestPackageVersionOperation(EditorFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/EFSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageHashOperation.cs
index 5c4d5848..83e18a0c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageHashOperation.cs
@@ -1,7 +1,10 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载编辑器包裹哈希文件操作
+ ///
internal class LoadEditorPackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -18,7 +21,7 @@ namespace YooAsset
///
/// 包裹哈希值
///
- public string PackageHash { private set; get; }
+ public string PackageHash { get; private set; }
internal LoadEditorPackageHashOperation(EditorFileSystem fileSystem, string packageVersion)
@@ -40,15 +43,24 @@ namespace YooAsset
string hashFilePath = _fileSystem.GetEditorPackageHashFilePath(_packageVersion);
if (File.Exists(hashFilePath))
{
- _steps = ESteps.Done;
PackageHash = FileUtility.ReadAllText(hashFilePath);
- Status = EOperationStatus.Succeeded;
+ if (TextUtility.ValidateContent(PackageHash, out string validateError) == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Simulation package hash file validate failed: {validateError}";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Can not found simulation package hash file : {hashFilePath}";
+ Error = $"Cannot find simulation package hash file: {hashFilePath}";
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageManifestOperation.cs
index 360ae81d..d790a59a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageManifestOperation.cs
@@ -1,7 +1,10 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载编辑器包裹清单文件操作
+ ///
internal class LoadEditorPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -16,14 +19,14 @@ namespace YooAsset
private readonly EditorFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly string _packageHash;
- private DeserializeManifestOperation _deserializer;
+ private DeserializeManifestOperation _deserializeManifestOp;
private byte[] _fileData;
private ESteps _steps = ESteps.None;
///
/// 包裹清单
///
- public PackageManifest Manifest { private set; get; }
+ public PackageManifest Manifest { get; private set; }
internal LoadEditorPackageManifestOperation(EditorFileSystem fileSystem, string packageVersion, string packageHash)
@@ -53,7 +56,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Can not found simulation package manifest file : {manifestFilePath}";
+ Error = $"Cannot find simulation package manifest file: {manifestFilePath}";
}
}
@@ -73,35 +76,35 @@ namespace YooAsset
if (_steps == ESteps.LoadManifest)
{
- if (_deserializer == null)
+ if (_deserializeManifestOp == null)
{
- _deserializer = new DeserializeManifestOperation(null, _fileData);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
+ _deserializeManifestOp = new DeserializeManifestOperation(null, _fileData);
+ _deserializeManifestOp.StartOperation();
+ AddChildOperation(_deserializeManifestOp);
}
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
+ _deserializeManifestOp.UpdateOperation();
+ Progress = _deserializeManifestOp.Progress;
+ if (_deserializeManifestOp.IsDone == false)
return;
- if (_deserializer.Status == EOperationStatus.Succeeded)
+ if (_deserializeManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
+ Manifest = _deserializeManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
+ Error = _deserializeManifestOp.Error;
}
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
+ return $"PackageVersion: {_packageVersion} PackageHash: {_packageHash}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageVersionOperation.cs
index cd4e9996..5ca94e3c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/LoadEditorPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载编辑器包裹版本文件操作
+ ///
internal class LoadEditorPackageVersionOperation : AsyncOperationBase
{
private enum ESteps
@@ -17,7 +20,7 @@ namespace YooAsset
///
/// 包裹版本
///
- public string PackageVersion { private set; get; }
+ public string PackageVersion { get; private set; }
internal LoadEditorPackageVersionOperation(EditorFileSystem fileSystem)
@@ -38,15 +41,24 @@ namespace YooAsset
string versionFilePath = _fileSystem.GetEditorPackageVersionFilePath();
if (File.Exists(versionFilePath))
{
- _steps = ESteps.Done;
PackageVersion = FileUtility.ReadAllText(versionFilePath);
- Status = EOperationStatus.Succeeded;
+ if (TextUtility.ValidateContent(PackageVersion, out string validateError) == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Simulation package version file validate failed: {validateError}";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Can not found simulation package version file : {versionFilePath}";
+ Error = $"Cannot find simulation package version file: {versionFilePath}";
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/SimulateAndCacheFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/SimulateAndCacheFileOperation.cs
index a9d3f7dc..49a6ce3a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/SimulateAndCacheFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/EditorFileSystem/Operations/internal/SimulateAndCacheFileOperation.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 模拟下载并缓存文件操作
+ ///
internal class SimulateAndCacheFileOperation : DownloadFileBaseOperation
{
protected enum ESteps
@@ -43,12 +46,18 @@ namespace YooAsset
// 检测下载结果
if (_steps == ESteps.CheckRequest)
{
- DownloadedBytes = _downloadRequest.DownloadedBytes;
- DownloadProgress = _downloadRequest.DownloadProgress;
- Progress = DownloadProgress;
+ Report.DownloadedBytes = _downloadRequest.DownloadedBytes;
+ Report.DownloadProgress = _downloadRequest.DownloadProgress;
+ Progress = _downloadRequest.DownloadProgress;
if (_downloadRequest.IsDone == false)
return;
+ // 更新下载报告
+ Report.DownloadedBytes = _downloadRequest.DownloadedBytes;
+ Report.DownloadProgress = _downloadRequest.DownloadProgress;
+ Report.HttpCode = _downloadRequest.HttpCode;
+ Report.HttpError = _downloadRequest.HttpError;
+
// 检查网络错误
if (_downloadRequest.Status == EDownloadRequestStatus.Succeeded)
{
@@ -104,8 +113,9 @@ namespace YooAsset
{
if (_steps != ESteps.Done)
{
- // 注意:不中断下载任务,保持后台继续下载
- YooLogger.Error($"Try load bundle {Bundle.BundleName} from remote : {Url}");
+ // 注意:不中断下载任务,保持下载后台继续下载
+ // 注意:上层异步操作会被动失败
+ YooLogger.Error($"Attempting to load bundle {Bundle.BundleName} from remote: {Url}");
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/ApplicationFootprint.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/ApplicationFootprint.cs
index 3c689fe7..34d99bfb 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/ApplicationFootprint.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/ApplicationFootprint.cs
@@ -1,4 +1,4 @@
-using System.IO;
+using System.IO;
using UnityEngine;
namespace YooAsset
@@ -27,7 +27,7 @@ namespace YooAsset
}
else
{
- Coverage(packageName);
+ Overwrite(packageName);
}
}
@@ -46,7 +46,7 @@ namespace YooAsset
///
/// 覆盖掉水印
///
- public void Coverage(string packageName)
+ public void Overwrite(string packageName)
{
#if UNITY_EDITOR
_footprint = Application.version;
@@ -54,7 +54,7 @@ namespace YooAsset
_footprint = Application.buildGUID;
#endif
FileUtility.WriteAllText(_filePath, _footprint);
- YooLogger.Log($"Save application footprint : {_footprint}");
+ YooLogger.Log($"Save application footprint: {_footprint}");
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadAndCacheFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadAndCacheFileOperation.cs
index 380e2d45..d2daa285 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadAndCacheFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadAndCacheFileOperation.cs
@@ -18,10 +18,10 @@ namespace YooAsset
private readonly SandboxFileSystem _fileSystem;
private readonly string _tempFilePath;
- private bool _enableResume = false;
- private long _fileOriginLength = 0;
- private IDownloadRequest _downloadRequest;
+ private IDownloadFileRequest _downloadFileRequest;
private FCWriteCacheOperation _writeCacheOp;
+ private bool _enableResume;
+ private long _fileOriginLength = 0;
private ESteps _steps = ESteps.None;
internal DownloadAndCacheFileOperation(SandboxFileSystem fileSystem, PackageBundle bundle, string url) : base(bundle, url)
@@ -42,18 +42,17 @@ namespace YooAsset
if (_steps == ESteps.CreateRequest)
{
FileUtility.EnsureFileDirectory(_tempFilePath);
-
_enableResume = Bundle.FileSize >= _fileSystem.ResumeDownloadMinimumSize;
if (_enableResume)
{
- _downloadRequest = CreateResumeRequest();
- _downloadRequest.SendRequest();
+ _downloadFileRequest = CreateResumeRequest();
+ _downloadFileRequest.SendRequest();
_steps = ESteps.CheckRequest;
}
else
{
- _downloadRequest = CreateNormalRequest();
- _downloadRequest.SendRequest();
+ _downloadFileRequest = CreateNormalRequest();
+ _downloadFileRequest.SendRequest();
_steps = ESteps.CheckRequest;
}
}
@@ -61,14 +60,28 @@ namespace YooAsset
// 检测下载结果
if (_steps == ESteps.CheckRequest)
{
- DownloadProgress = _downloadRequest.DownloadProgress;
- DownloadedBytes = _fileOriginLength + _downloadRequest.DownloadedBytes;
- Progress = DownloadProgress;
- if (_downloadRequest.IsDone == false)
+ bool isDone = _downloadFileRequest.IsDone;
+ if (_enableResume)
+ {
+ Report.DownloadedBytes = _fileOriginLength + _downloadFileRequest.DownloadedBytes;
+ Report.DownloadProgress = (float)((double)Report.DownloadedBytes / Bundle.FileSize);
+ Progress = Report.DownloadProgress;
+ }
+ else
+ {
+ Report.DownloadedBytes = _downloadFileRequest.DownloadedBytes;
+ Report.DownloadProgress = _downloadFileRequest.DownloadProgress;
+ Progress = Report.DownloadProgress;
+ }
+ if (isDone == false)
return;
+ // 更新下载报告
+ Report.HttpCode = _downloadFileRequest.HttpCode;
+ Report.HttpError = _downloadFileRequest.HttpError;
+
// 检查网络错误
- if (_downloadRequest.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.CacheFile;
}
@@ -76,12 +89,19 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _downloadRequest.Error;
- }
+ Error = _downloadFileRequest.Error;
- // 在遇到特殊错误的时候删除文件
- if (_enableResume)
- ClearTempFileWhenError(_downloadRequest.HttpCode);
+ if (_enableResume)
+ {
+ // 注意: HTTP 416 Range Not Satisfiable 表示服务器无法满足客户端在 Range 请求头中指定的字节范围请求。
+ if (_downloadFileRequest.HttpCode == 416)
+ DeleteTempFile();
+ }
+ else
+ {
+ DeleteTempFile();
+ }
+ }
}
// 缓存文件
@@ -114,28 +134,28 @@ namespace YooAsset
}
// 注意:缓存完成后直接删除临时文件
- if (File.Exists(_tempFilePath))
- File.Delete(_tempFilePath);
+ DeleteTempFile();
}
}
internal override void InternalDispose()
{
- if (_downloadRequest != null)
+ if (_downloadFileRequest != null)
{
- _downloadRequest.Dispose();
- _downloadRequest = null;
+ _downloadFileRequest.Dispose();
+ _downloadFileRequest = null;
}
}
internal override void InternalWaitForCompletion()
{
if (_steps != ESteps.Done)
{
- // 注意:不中断下载任务,保持后台继续下载
- YooLogger.Error($"Try load bundle {Bundle.BundleName} from remote : {Url}");
+ // 注意:不中断下载任务,保持下载后台继续下载
+ // 注意:上层异步操作会被动失败
+ YooLogger.Error($"Attempting to load bundle {Bundle.BundleName} from remote: {Url}");
}
}
- private IDownloadRequest CreateResumeRequest()
+ private IDownloadFileRequest CreateResumeRequest()
{
// 获取下载起始位置
if (File.Exists(_tempFilePath))
@@ -143,7 +163,7 @@ namespace YooAsset
FileInfo fileInfo = new FileInfo(_tempFilePath);
if (fileInfo.Length >= Bundle.FileSize)
{
- File.Delete(_tempFilePath);
+ DeleteTempFile();
}
else
{
@@ -151,7 +171,7 @@ namespace YooAsset
}
}
- int watchdogTime = _fileSystem.DownloadWatchDogTimeout;
+ int watchdogTime = _fileSystem.DownloadWatchdogTimeout;
int timeout = 0; //注意:文件下载不做超时检测
bool appendToFile = true;
bool removeFileOnAbort = false;
@@ -159,28 +179,19 @@ namespace YooAsset
var args = new DownloadFileRequestArgs(Url, _tempFilePath, timeout, watchdogTime, appendToFile, removeFileOnAbort, resumeOffset);
return _fileSystem.DownloadBackend.CreateFileRequest(args);
}
- private IDownloadRequest CreateNormalRequest()
+ private IDownloadFileRequest CreateNormalRequest()
{
- // 删除历史缓存文件
- if (File.Exists(_tempFilePath))
- File.Delete(_tempFilePath);
+ DeleteTempFile();
- int watchdogTime = _fileSystem.DownloadWatchDogTimeout;
+ int watchdogTime = _fileSystem.DownloadWatchdogTimeout;
int timeout = 0; //注意:文件下载不做超时检测
var args = new DownloadFileRequestArgs(Url, _tempFilePath, timeout, watchdogTime);
return _fileSystem.DownloadBackend.CreateFileRequest(args);
}
- private void ClearTempFileWhenError(long httpCode)
+ private void DeleteTempFile()
{
- if (_fileSystem.ResumeDownloadResponseCodes == null)
- return;
-
- //说明:如果遇到以下错误返回码,验证失败直接删除文件
- if (_fileSystem.ResumeDownloadResponseCodes.Contains(httpCode))
- {
- if (File.Exists(_tempFilePath))
- File.Delete(_tempFilePath);
- }
+ if (File.Exists(_tempFilePath))
+ File.Delete(_tempFilePath);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageHashOperation.cs
index d1c63b7b..be24ece7 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageHashOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 下载包裹哈希文件操作
+ ///
internal class DownloadPackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -9,14 +12,16 @@ namespace YooAsset
None,
CheckExist,
DownloadFile,
+ VerifyFile,
Done,
}
private readonly SandboxFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly int _timeout;
- private IDownloadFileRequest _webFileRequestOp;
- private int _requestCount = 0;
+ private IDownloadFileRequest _downloadFileRequest;
+ private string _savePath;
+ private string _tempPath;
private ESteps _steps = ESteps.None;
@@ -28,7 +33,8 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_fileSystem.PackageName, nameof(DownloadPackageHashOperation));
+ _savePath = _fileSystem.GetCachePackageHashFilePath(_packageVersion);
+ _tempPath = _savePath + ".tmp";
_steps = ESteps.CheckExist;
}
internal override void InternalUpdate()
@@ -38,8 +44,7 @@ namespace YooAsset
if (_steps == ESteps.CheckExist)
{
- string filePath = _fileSystem.GetCachePackageHashFilePath(_packageVersion);
- if (File.Exists(filePath))
+ if (File.Exists(_savePath))
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
@@ -52,50 +57,86 @@ namespace YooAsset
if (_steps == ESteps.DownloadFile)
{
- if (_webFileRequestOp == null)
+ if (_downloadFileRequest == null)
{
- string savePath = _fileSystem.GetCachePackageHashFilePath(_packageVersion);
+ // 删除历史临时文件
+ if (File.Exists(_tempPath))
+ File.Delete(_tempPath);
+
string fileName = YooAssetSettingsData.GetPackageHashFileName(_fileSystem.PackageName, _packageVersion);
string webURL = GetWebRequestURL(fileName);
- int watchdogTime = _fileSystem.DownloadWatchDogTimeout;
- var args = new DownloadFileRequestArgs(webURL, savePath, _timeout, watchdogTime);
- _webFileRequestOp = _fileSystem.DownloadBackend.CreateFileRequest(args);
- _webFileRequestOp.SendRequest();
+ int watchdogTime = _fileSystem.DownloadWatchdogTimeout;
+ var args = new DownloadFileRequestArgs(webURL, _tempPath, _timeout, watchdogTime);
+ _downloadFileRequest = _fileSystem.DownloadBackend.CreateFileRequest(args);
+ _downloadFileRequest.SendRequest();
}
- if (_webFileRequestOp.IsDone == false)
+ if (_downloadFileRequest.IsDone == false)
return;
- if (_webFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeeded;
+ _steps = ESteps.VerifyFile;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webFileRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_fileSystem.PackageName, nameof(DownloadPackageHashOperation));
+ Error = _downloadFileRequest.Error;
+ _fileSystem.DownloadURLPolicy.OnFailure(_downloadFileRequest.Url, _downloadFileRequest.HttpCode, _downloadFileRequest.HttpError);
+ DeleteTempFile();
+ }
+ }
+
+ if (_steps == ESteps.VerifyFile)
+ {
+ // 严格校验临时文件内容
+ string content = FileUtility.ReadAllText(_tempPath);
+ if (TextUtility.ValidateContent(content, out string validateError) == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Downloaded package hash file validate failed: {validateError}";
+ DeleteTempFile();
+ return;
+ }
+
+ // 原子移动到最终缓存路径
+ try
+ {
+ if (File.Exists(_savePath))
+ File.Delete(_savePath);
+ File.Move(_tempPath, _savePath);
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
+ catch (System.Exception ex)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Failed to move hash temp file to cache path: {ex.Message}";
+ DeleteTempFile();
}
}
}
internal override void InternalDispose()
{
- if (_webFileRequestOp != null)
+ if (_downloadFileRequest != null)
{
- _webFileRequestOp.Dispose();
- _webFileRequestOp = null;
+ _downloadFileRequest.Dispose();
+ _downloadFileRequest = null;
}
}
+ private void DeleteTempFile()
+ {
+ if (File.Exists(_tempPath))
+ File.Delete(_tempPath);
+ }
private string GetWebRequestURL(string fileName)
{
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _fileSystem.RemoteServices.GetRemoteURLs(fileName);
+ return _fileSystem.DownloadURLPolicy.SelectURL(urls);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageManifestOperation.cs
index 47a45dc7..659d3ab8 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/DownloadPackageManifestOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 下载包裹清单文件操作
+ ///
internal class DownloadPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -9,14 +12,16 @@ namespace YooAsset
None,
CheckExist,
DownloadFile,
+ VerifyFile,
Done,
}
private readonly SandboxFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly int _timeout;
- private IDownloadFileRequest _webFileRequestOp;
- private int _requestCount = 0;
+ private IDownloadFileRequest _downloadFileRequest;
+ private string _savePath;
+ private string _tempPath;
private ESteps _steps = ESteps.None;
@@ -28,7 +33,8 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_fileSystem.PackageName, nameof(DownloadPackageManifestOperation));
+ _savePath = _fileSystem.GetCachePackageManifestFilePath(_packageVersion);
+ _tempPath = _savePath + ".tmp";
_steps = ESteps.CheckExist;
}
internal override void InternalUpdate()
@@ -38,8 +44,7 @@ namespace YooAsset
if (_steps == ESteps.CheckExist)
{
- string filePath = _fileSystem.GetCachePackageManifestFilePath(_packageVersion);
- if (File.Exists(filePath))
+ if (File.Exists(_savePath))
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
@@ -52,50 +57,86 @@ namespace YooAsset
if (_steps == ESteps.DownloadFile)
{
- if (_webFileRequestOp == null)
+ if (_downloadFileRequest == null)
{
- string savePath = _fileSystem.GetCachePackageManifestFilePath(_packageVersion);
+ // 删除历史临时文件
+ if (File.Exists(_tempPath))
+ File.Delete(_tempPath);
+
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_fileSystem.PackageName, _packageVersion);
string webURL = GetDownloadRequestURL(fileName);
- int watchdogTime = _fileSystem.DownloadWatchDogTimeout;
- var args = new DownloadFileRequestArgs(webURL, savePath, _timeout, watchdogTime);
- _webFileRequestOp = _fileSystem.DownloadBackend.CreateFileRequest(args);
- _webFileRequestOp.SendRequest();
+ int watchdogTime = _fileSystem.DownloadWatchdogTimeout;
+ var args = new DownloadFileRequestArgs(webURL, _tempPath, _timeout, watchdogTime);
+ _downloadFileRequest = _fileSystem.DownloadBackend.CreateFileRequest(args);
+ _downloadFileRequest.SendRequest();
}
- if (_webFileRequestOp.IsDone == false)
+ if (_downloadFileRequest.IsDone == false)
return;
- if (_webFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeeded;
+ _steps = ESteps.VerifyFile;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webFileRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_fileSystem.PackageName, nameof(DownloadPackageManifestOperation));
+ Error = _downloadFileRequest.Error;
+ _fileSystem.DownloadURLPolicy.OnFailure(_downloadFileRequest.Url, _downloadFileRequest.HttpCode, _downloadFileRequest.HttpError);
+ DeleteTempFile();
+ }
+ }
+
+ if (_steps == ESteps.VerifyFile)
+ {
+ // 验证临时文件存在且大小有效
+ FileInfo fileInfo = new FileInfo(_tempPath);
+ if (fileInfo.Exists == false || fileInfo.Length == 0)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "Downloaded package manifest temp file is invalid.";
+ DeleteTempFile();
+ return;
+ }
+
+ // 原子移动到最终缓存路径
+ try
+ {
+ if (File.Exists(_savePath))
+ File.Delete(_savePath);
+ File.Move(_tempPath, _savePath);
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeeded;
+ }
+ catch (System.Exception ex)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Failed to move manifest temp file to cache path: {ex.Message}";
+ DeleteTempFile();
}
}
}
internal override void InternalDispose()
{
- if (_webFileRequestOp != null)
+ if (_downloadFileRequest != null)
{
- _webFileRequestOp.Dispose();
- _webFileRequestOp = null;
+ _downloadFileRequest.Dispose();
+ _downloadFileRequest = null;
}
}
+ private void DeleteTempFile()
+ {
+ if (File.Exists(_tempPath))
+ File.Delete(_tempPath);
+ }
private string GetDownloadRequestURL(string fileName)
{
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _fileSystem.RemoteServices.GetRemoteURLs(fileName);
+ return _fileSystem.DownloadURLPolicy.SelectURL(urls);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/ImportAndCacheFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/ImportAndCacheFileOperation.cs
index d0b3f192..f3d8e6da 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/ImportAndCacheFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/ImportAndCacheFileOperation.cs
@@ -2,6 +2,9 @@ using System.IO;
namespace YooAsset
{
+ ///
+ /// 导入并缓存文件操作
+ ///
internal sealed class ImportAndCacheFileOperation : DownloadFileBaseOperation
{
private enum ESteps
@@ -51,13 +54,17 @@ namespace YooAsset
try
{
File.Copy(_sourceFilePath, _tempFilePath, true);
+
+ // 更新下载报告
+ Report.DownloadedBytes = Bundle.FileSize;
+ Report.DownloadProgress = 1f;
_steps = ESteps.CacheFile;
}
catch (System.Exception ex)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Failed copy local file : {ex.Message}";
+ Error = $"Failed to copy local file: {ex.Message}";
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageHashOperation.cs
index 2dd1566d..f2304384 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageHashOperation.cs
@@ -1,7 +1,10 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载缓存包裹哈希文件操作
+ ///
internal class LoadCachePackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -18,7 +21,7 @@ namespace YooAsset
///
/// 包裹哈希值
///
- public string PackageHash { private set; get; }
+ public string PackageHash { get; private set; }
internal LoadCachePackageHashOperation(SandboxFileSystem fileSystem, string packageVersion)
@@ -42,16 +45,16 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Can not found cache package hash file : {filePath}";
+ Error = $"Cannot find cache package hash file: {filePath}";
return;
}
PackageHash = FileUtility.ReadAllText(filePath);
- if (string.IsNullOrEmpty(PackageHash))
+ if (TextUtility.ValidateContent(PackageHash, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Cache package hash file content is empty.";
+ Error = $"Cache package hash file validate failed: {validateError}";
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageManifestOperation.cs
index a35442c9..7c532091 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/LoadCachePackageManifestOperation.cs
@@ -1,7 +1,10 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
+ ///
+ /// 加载缓存包裹清单文件操作
+ ///
internal class LoadCachePackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -16,14 +19,14 @@ namespace YooAsset
private readonly SandboxFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly string _packageHash;
- private DeserializeManifestOperation _deserializer;
+ private DeserializeManifestOperation _deserializeManifestOp;
private byte[] _fileData;
private ESteps _steps = ESteps.None;
///
/// 包裹清单
///
- public PackageManifest Manifest { private set; get; }
+ public PackageManifest Manifest { get; private set; }
internal LoadCachePackageManifestOperation(SandboxFileSystem fileSystem, string packageVersion, string packageHash)
@@ -53,7 +56,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Can not found cache manifest file : {manifestFilePath}";
+ Error = $"Cannot find cache manifest file: {manifestFilePath}";
}
}
@@ -73,35 +76,35 @@ namespace YooAsset
if (_steps == ESteps.LoadManifest)
{
- if (_deserializer == null)
+ if (_deserializeManifestOp == null)
{
- _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _fileData);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
+ _deserializeManifestOp = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _fileData);
+ _deserializeManifestOp.StartOperation();
+ AddChildOperation(_deserializeManifestOp);
}
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
+ _deserializeManifestOp.UpdateOperation();
+ Progress = _deserializeManifestOp.Progress;
+ if (_deserializeManifestOp.IsDone == false)
return;
- if (_deserializer.Status == EOperationStatus.Succeeded)
+ if (_deserializeManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
+ Manifest = _deserializeManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
+ Error = _deserializeManifestOp.Error;
}
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
+ return $"PackageVersion: {_packageVersion} PackageHash: {_packageHash}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/RequestRemotePackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/RequestRemotePackageVersionOperation.cs
index a674b47c..5bdd85a7 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/RequestRemotePackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/Internal/RequestRemotePackageVersionOperation.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 请求远端包裹版本操作
+ ///
internal class RequestRemotePackageVersionOperation : AsyncOperationBase
{
private enum ESteps
@@ -13,8 +16,7 @@ namespace YooAsset
private readonly SandboxFileSystem _fileSystem;
private readonly bool _appendTimeTicks;
private readonly int _timeout;
- private IDownloadTextRequest _webTextRequestOp;
- private int _requestCount = 0;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
@@ -31,7 +33,6 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _requestCount = DownloadFailureCounter.GetFailureCount(_fileSystem.PackageName, nameof(RequestRemotePackageVersionOperation));
_steps = ESteps.RequestPackageVersion;
}
internal override void InternalUpdate()
@@ -41,28 +42,28 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(_fileSystem.PackageName);
string url = GetWebRequestURL(fileName);
- int watchDogTime = _fileSystem.DownloadWatchDogTimeout;
+ int watchDogTime = _fileSystem.DownloadWatchdogTimeout;
var args = new DownloadDataRequestArgs(url, _timeout, watchDogTime);
- _webTextRequestOp = _fileSystem.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _fileSystem.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- Progress = _webTextRequestOp.DownloadProgress;
- if (_webTextRequestOp.IsDone == false)
+ Progress = _downloadTextRequest.DownloadProgress;
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageVersion = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageVersion))
+ PackageVersion = _downloadTextRequest.Result;
+ if (TextUtility.ValidateContent(PackageVersion, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Remote package version file content is empty.";
+ Error = $"Remote package version file validate failed: {validateError}";
}
else
{
@@ -74,29 +75,24 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
- DownloadFailureCounter.RecordFailure(_fileSystem.PackageName, nameof(RequestRemotePackageVersionOperation));
+ Error = _downloadTextRequest.Error;
+ _fileSystem.DownloadURLPolicy.OnFailure(_downloadTextRequest.Url, _downloadTextRequest.HttpCode, _downloadTextRequest.HttpError);
}
}
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
private string GetWebRequestURL(string fileName)
{
- string url;
-
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- url = _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- url = _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
+ var urls = _fileSystem.RemoteServices.GetRemoteURLs(fileName);
+ string url = _fileSystem.DownloadURLPolicy.SelectURL(urls);
// 在URL末尾添加时间戳
if (_appendTimeTicks)
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSClearCacheOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSClearCacheOperation.cs
index 45839d78..1ac6cd01 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSClearCacheOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSClearCacheOperation.cs
@@ -1,8 +1,11 @@
-using System;
+using System;
using System.IO;
namespace YooAsset
{
+ ///
+ /// 沙盒文件系统的清理缓存操作
+ ///
internal class SFSClearCacheOperation : FSClearCacheOperation
{
private enum ESteps
@@ -13,11 +16,11 @@ namespace YooAsset
}
private readonly SandboxFileSystem _fileSystem;
- private readonly ClearCacheOptions _options;
+ private readonly FSClearCacheOptions _options;
private FCClearCacheOperation _clearCacheOp;
private ESteps _steps = ESteps.None;
- internal SFSClearCacheOperation(SandboxFileSystem fileSystem, ClearCacheOptions options)
+ internal SFSClearCacheOperation(SandboxFileSystem fileSystem, FSClearCacheOptions options)
{
_fileSystem = fileSystem;
_options = options;
@@ -35,7 +38,7 @@ namespace YooAsset
{
if (_clearCacheOp == null)
{
- _clearCacheOp = _fileSystem.FileCache.ClearCacheAsync(_options);
+ _clearCacheOp = _fileSystem.FileCache.ClearCacheAsync(_options.ConvertTo());
_clearCacheOp.StartOperation();
AddChildOperation(_clearCacheOp);
}
@@ -59,7 +62,10 @@ namespace YooAsset
}
}
- internal class CFSClearAllCacheManifestOperation : FSClearCacheOperation
+ ///
+ /// 沙盒文件系统的清理所有缓存清单操作
+ ///
+ internal class SFSClearAllCacheManifestOperation : FSClearCacheOperation
{
private enum ESteps
{
@@ -71,7 +77,7 @@ namespace YooAsset
private readonly SandboxFileSystem _fileSystem;
private ESteps _steps = ESteps.None;
- internal CFSClearAllCacheManifestOperation(SandboxFileSystem fileSystem)
+ internal SFSClearAllCacheManifestOperation(SandboxFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
@@ -96,7 +102,7 @@ namespace YooAsset
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
string fileName = fileInfo.Name;
- if (fileName == SandboxFileSystemDefine.AppFootPrintFileName)
+ if (fileName == SandboxFileSystemConsts.AppFootprintFileName)
continue;
fileInfo.Delete();
@@ -109,14 +115,17 @@ namespace YooAsset
catch (Exception ex)
{
_steps = ESteps.Done;
- Error = ex.Message;
Status = EOperationStatus.Failed;
+ Error = ex.Message;
}
}
}
}
- internal class CFSClearUnusedCacheManifestOperation : FSClearCacheOperation
+ ///
+ /// 沙盒文件系统的清理未使用缓存清单操作
+ ///
+ internal class SFSClearUnusedCacheManifestOperation : FSClearCacheOperation
{
private enum ESteps
{
@@ -130,7 +139,7 @@ namespace YooAsset
private readonly PackageManifest _manifest;
private ESteps _steps = ESteps.None;
- internal CFSClearUnusedCacheManifestOperation(SandboxFileSystem fileSystem, PackageManifest manifest)
+ internal SFSClearUnusedCacheManifestOperation(SandboxFileSystem fileSystem, PackageManifest manifest)
{
_fileSystem = fileSystem;
_manifest = manifest;
@@ -150,7 +159,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Can not found active package manifest.";
+ Error = "Cannot find active package manifest.";
}
else
{
@@ -173,7 +182,7 @@ namespace YooAsset
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
string fileName = fileInfo.Name;
- if (fileName == SandboxFileSystemDefine.AppFootPrintFileName)
+ if (fileName == SandboxFileSystemConsts.AppFootprintFileName)
continue;
if (fileName == activeManifestFileName || fileName == activeHashFileName)
continue;
@@ -188,8 +197,8 @@ namespace YooAsset
catch (Exception ex)
{
_steps = ESteps.Done;
- Error = ex.Message;
Status = EOperationStatus.Failed;
+ Error = ex.Message;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSDownloadFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSDownloadFileOperation.cs
index 85e401e6..00cb79b0 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSDownloadFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSDownloadFileOperation.cs
@@ -2,32 +2,32 @@ using UnityEngine;
namespace YooAsset
{
+ ///
+ /// 沙盒文件系统的下载文件操作
+ ///
internal class SFSDownloadFileOperation : FSDownloadFileOperation
{
protected enum ESteps
{
None,
CheckExists,
- DownloadAndCache,
+ CreateDownload,
+ CheckDownload,
TryAgain,
Done,
}
private readonly SandboxFileSystem _fileSystem;
private readonly FSDownloadFileOptions _options;
+ private readonly DownloadRetry _downloadRetry;
private DownloadFileBaseOperation _downloadFileOp;
private ESteps _steps = ESteps.None;
- // 失败重试
- private int _requestCount = 0;
- private float _tryAgainTimer = 0;
- private int _failedTryAgain;
-
internal SFSDownloadFileOperation(SandboxFileSystem fileSystem, FSDownloadFileOptions options) : base(options.Bundle)
{
_fileSystem = fileSystem;
_options = options;
- _failedTryAgain = options.RetryCount;
+ _downloadRetry = new DownloadRetry(options.RetryCount, _fileSystem.DownloadRetryPolicy);
}
internal override void InternalStart()
{
@@ -48,57 +48,62 @@ namespace YooAsset
}
else
{
- _steps = ESteps.DownloadAndCache;
+ _steps = ESteps.CreateDownload;
}
}
- // 下载并缓存文件
- if (_steps == ESteps.DownloadAndCache)
+ // 创建下载器
+ if (_steps == ESteps.CreateDownload)
{
+ _downloadFileOp = _fileSystem.DownloadScheduler.TryGetDownloadFile(Bundle);
if (_downloadFileOp == null)
{
- _downloadFileOp = _fileSystem.DownloadScheduler.TryGetDownloadFile(Bundle);
- if (_downloadFileOp == null)
+ if (string.IsNullOrEmpty(_options.ImportFilePath))
{
- if (string.IsNullOrEmpty(_options.ImportFilePath))
- {
- // 下载远端文件
- string mainURL = _fileSystem.RemoteServices.GetRemoteMainURL(Bundle.FileName);
- string fallbackURL = _fileSystem.RemoteServices.GetRemoteFallbackURL(Bundle.FileName);
- string url = GetRequestURL(mainURL, fallbackURL);
- _downloadFileOp = new DownloadAndCacheFileOperation(_fileSystem, Bundle, url);
- _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
- }
- else
- {
- // 导入本地文件
- _downloadFileOp = new ImportAndCacheFileOperation(_fileSystem, Bundle, _options.ImportFilePath);
- _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
- }
+ // 下载远端文件
+ string url = GetRequestURL(Bundle.FileName);
+ _downloadFileOp = new DownloadAndCacheFileOperation(_fileSystem, Bundle, url);
+ _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
+ }
+ else
+ {
+ // 导入本地文件
+ _downloadFileOp = new ImportAndCacheFileOperation(_fileSystem, Bundle, _options.ImportFilePath);
+ _fileSystem.DownloadScheduler.AddDownloadFile(_downloadFileOp);
}
}
+ _steps = ESteps.CheckDownload;
+ }
+
+ // 检测结果
+ if (_steps == ESteps.CheckDownload)
+ {
if (IsWaitForCompletion)
_downloadFileOp.WaitForCompletion();
_downloadFileOp.UpdateOperation();
Progress = _downloadFileOp.Progress;
- DownloadedBytes = _downloadFileOp.DownloadedBytes;
- DownloadProgress = _downloadFileOp.DownloadProgress;
+ Report = _downloadFileOp.Report;
if (_downloadFileOp.IsDone == false)
return;
if (_downloadFileOp.Status == EOperationStatus.Succeeded)
{
+ _fileSystem.DownloadURLPolicy.OnSuccess(_downloadFileOp.Url);
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
}
else
{
- if (IsWaitForCompletion == false && _failedTryAgain > 0)
+ string url = _downloadFileOp.Url;
+ long httpCode = _downloadFileOp.Report.HttpCode;
+ string httpError = _downloadFileOp.Report.HttpError;
+ _fileSystem.DownloadURLPolicy.OnFailure(url, httpCode, httpError);
+ if (IsWaitForCompletion == false && _downloadRetry.CanRetry(url, httpCode, httpError))
{
+ _downloadRetry.BeginWait();
_steps = ESteps.TryAgain;
- YooLogger.Warning($"Failed download : {_downloadFileOp.Url} Try again.");
}
else
{
@@ -113,15 +118,11 @@ namespace YooAsset
// 重新尝试下载
if (_steps == ESteps.TryAgain)
{
- _tryAgainTimer += Time.unscaledDeltaTime;
- if (_tryAgainTimer > 1f)
+ if (_downloadRetry.Tick())
{
- _tryAgainTimer = 0f;
- _failedTryAgain--;
Progress = 0f;
- DownloadProgress = 0f;
- DownloadedBytes = 0;
- _steps = ESteps.DownloadAndCache;
+ Report = DownloadReport.Default;
+ _steps = ESteps.CreateDownload;
}
}
}
@@ -144,14 +145,10 @@ namespace YooAsset
///
/// 获取网络请求地址
///
- private string GetRequestURL(string mainURL, string fallbackURL)
+ private string GetRequestURL(string fileName)
{
- // 轮流返回请求地址
- _requestCount++;
- if (_requestCount % 2 == 0)
- return fallbackURL;
- else
- return mainURL;
+ var urls = _fileSystem.RemoteServices.GetRemoteURLs(fileName);
+ return _fileSystem.DownloadURLPolicy.SelectURL(urls);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSInitializeOperation.cs
index ac6397e9..7070607c 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSInitializeOperation.cs
@@ -1,11 +1,16 @@
namespace YooAsset
{
+ ///
+ /// 沙盒文件系统的初始化操作
+ ///
internal class SFSInitializeOperation : FSInitializeOperation
{
private enum ESteps
{
None,
+ CheckPlatform,
+ CheckParameter,
CheckAppFootprint,
InitializeFileCache,
CreateScheduler,
@@ -23,22 +28,40 @@ namespace YooAsset
}
internal override void InternalStart()
{
-#if UNITY_WEBGL
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"{nameof(DefaultCacheFileSystem)} is not support WEBGL platform.";
-#else
- _steps = ESteps.CheckAppFootprint;
-#endif
+ _steps = ESteps.CheckPlatform;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.CheckPlatform)
+ {
+#if UNITY_WEBGL
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(SandboxFileSystem)} does not support the WebGL platform.";
+#else
+ _steps = ESteps.CheckParameter;
+#endif
+ }
+
+ if (_steps == ESteps.CheckParameter)
+ {
+ if (_fileSystem.RemoteServices == null)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(IRemoteServices)} is null.";
+ return;
+ }
+
+ _steps = ESteps.CheckAppFootprint;
+ }
+
if (_steps == ESteps.CheckAppFootprint)
{
- string footprintFilePath = _fileSystem.GetSandboxAppFootPrintFilePath();
+ string footprintFilePath = _fileSystem.GetSandboxAppFootprintFilePath();
var appFootprint = new ApplicationFootprint(footprintFilePath);
appFootprint.Load(_fileSystem.PackageName);
@@ -47,30 +70,31 @@ namespace YooAsset
{
if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.None)
{
- YooLogger.Warning("Do nothing when overwrite install application.");
+ YooLogger.Warning("No action required on overwrite installation.");
}
else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllCacheFiles)
{
_fileSystem.DeleteAllBundleFiles();
_fileSystem.DeleteAllManifestFiles();
- YooLogger.Warning("Delete all cache files when overwrite install application.");
+ _fileSystem.DeleteAllTempFiles();
+ YooLogger.Warning("Deleted all cache files on overwrite installation.");
}
else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllBundleFiles)
{
_fileSystem.DeleteAllBundleFiles();
- YooLogger.Warning("Delete all bundle files when overwrite install application.");
+ YooLogger.Warning("Deleted all bundle files on overwrite installation.");
}
else if (_fileSystem.InstallCleanupMode == EInstallCleanupMode.ClearAllManifestFiles)
{
_fileSystem.DeleteAllManifestFiles();
- YooLogger.Warning("Delete all manifest files when overwrite install application.");
+ YooLogger.Warning("Deleted all manifest files on overwrite installation.");
}
else
{
throw new System.NotImplementedException(_fileSystem.InstallCleanupMode.ToString());
}
- appFootprint.Coverage(_fileSystem.PackageName);
+ appFootprint.Overwrite(_fileSystem.PackageName);
}
_steps = ESteps.InitializeFileCache;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageBundleOperation.cs
similarity index 77%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageBundleOperation.cs
index ee40d4df..b84ce9ae 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageBundleOperation.cs
@@ -1,7 +1,10 @@
namespace YooAsset
{
- internal class SFSLoadBundleOperation : FSLoadBundleOperation
+ ///
+ /// 沙盒文件系统的加载资源包操作
+ ///
+ internal class SFSLoadPackageBundleOperation : FSLoadPackageBundleOperation
{
private enum ESteps
{
@@ -9,18 +12,18 @@ namespace YooAsset
Prepare,
DownloadFile,
AbortDownload,
- LoadSandboxBundle,
+ LoadBundle,
CheckResult,
Done,
}
private readonly SandboxFileSystem _fileSystem;
- private readonly FCLoadBundleOptions _options;
+ private readonly FSLoadPackageBundleOptions _options;
private FSDownloadFileOperation _downloadFileOp;
private FCLoadBundleOperation _loadBundleOp;
private ESteps _steps = ESteps.None;
- internal SFSLoadBundleOperation(SandboxFileSystem fileSystem, FCLoadBundleOptions options)
+ internal SFSLoadPackageBundleOperation(SandboxFileSystem fileSystem, FSLoadPackageBundleOptions options)
{
_fileSystem = fileSystem;
_options = options;
@@ -38,9 +41,7 @@ namespace YooAsset
{
if (_fileSystem.FileCache.IsCached(_options.Bundle.BundleGUID))
{
- DownloadProgress = 1f;
- DownloadedBytes = _options.Bundle.FileSize;
- _steps = ESteps.LoadSandboxBundle;
+ _steps = ESteps.LoadBundle;
}
else
{
@@ -48,7 +49,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"The bundle not cached : {_options.Bundle.BundleName}";
+ Error = $"The bundle is not cached: {_options.Bundle.BundleName}";
YooLogger.Warning(Error);
}
else
@@ -73,8 +74,10 @@ namespace YooAsset
{
if (_downloadFileOp == null)
{
- FSDownloadFileOptions options = new FSDownloadFileOptions(_options.Bundle, int.MaxValue);
- _downloadFileOp = _fileSystem.DownloadFileAsync(options); // 注意:异步任务的开启由调度器统一控制
+ // 注意:网络原因失败后,重新尝试直到成功
+ var options = new FSDownloadFileOptions(_options.Bundle, int.MaxValue);
+ _downloadFileOp = _fileSystem.DownloadFileAsync(options);
+ _downloadFileOp.StartOperation();
AddChildOperation(_downloadFileOp);
}
@@ -82,14 +85,12 @@ namespace YooAsset
_downloadFileOp.WaitForCompletion();
_downloadFileOp.UpdateOperation();
- DownloadProgress = _downloadFileOp.DownloadProgress;
- DownloadedBytes = _downloadFileOp.DownloadedBytes;
if (_downloadFileOp.IsDone == false)
return;
if (_downloadFileOp.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadSandboxBundle;
+ _steps = ESteps.LoadBundle;
}
else
{
@@ -113,12 +114,12 @@ namespace YooAsset
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Abort download file.";
+ Error = "File download aborted.";
}
- if (_steps == ESteps.LoadSandboxBundle)
+ if (_steps == ESteps.LoadBundle)
{
- _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options);
+ _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options.ConvertTo());
_loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp);
_steps = ESteps.CheckResult;
@@ -135,18 +136,18 @@ namespace YooAsset
if (_loadBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadBundleOp.BundleResult == null)
+ if (_loadBundleOp.BundleHandle == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "Fatal error: loaded bundle result is null.";
+ Error = "Fatal error: loaded bundle handle is null.";
YooLogger.Error(Error);
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- Result = _loadBundleOp.BundleResult;
+ BundleHandle = _loadBundleOp.BundleHandle;
}
}
else
@@ -158,5 +159,9 @@ namespace YooAsset
}
}
}
+ internal override void InternalWaitForCompletion()
+ {
+ ExecuteBatch();
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageManifestOperation.cs
similarity index 89%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageManifestOperation.cs
index e175838e..be48762e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageManifestOperation.cs
@@ -1,16 +1,19 @@
-using System.IO;
+using System.IO;
namespace YooAsset
{
- internal class SFSLoadPackageManifestOperation : FSLoadManifestOperation
+ ///
+ /// 沙盒文件系统的加载包裹清单操作
+ ///
+ internal class SFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
None,
DownloadPackageHash,
DownloadPackageManifest,
- LoadCachePackageHash,
- LoadCachePackageManifest,
+ LoadPackageHash,
+ LoadPackageManifest,
Done,
}
@@ -79,7 +82,7 @@ namespace YooAsset
if (_downloadPackageManifestOp.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadCachePackageHash;
+ _steps = ESteps.LoadPackageHash;
}
else
{
@@ -89,7 +92,7 @@ namespace YooAsset
}
}
- if (_steps == ESteps.LoadCachePackageHash)
+ if (_steps == ESteps.LoadPackageHash)
{
if (_loadCachePackageHashOp == null)
{
@@ -104,7 +107,7 @@ namespace YooAsset
if (_loadCachePackageHashOp.Status == EOperationStatus.Succeeded)
{
- _steps = ESteps.LoadCachePackageManifest;
+ _steps = ESteps.LoadPackageManifest;
}
else
{
@@ -115,7 +118,7 @@ namespace YooAsset
}
}
- if (_steps == ESteps.LoadCachePackageManifest)
+ if (_steps == ESteps.LoadPackageManifest)
{
if (_loadCachePackageManifestOp == null)
{
@@ -133,8 +136,8 @@ namespace YooAsset
if (_loadCachePackageManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _loadCachePackageManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
+ Manifest = _loadCachePackageManifestOp.Manifest;
}
else
{
@@ -152,13 +155,14 @@ namespace YooAsset
string manifestFilePath = _fileSystem.GetCachePackageManifestFilePath(_packageVersion);
if (File.Exists(manifestFilePath))
{
- YooLogger.Warning($"Invalid cache manifest file have been removed : {manifestFilePath}");
+ YooLogger.Warning($"Invalid package manifest file has been removed: {manifestFilePath}");
File.Delete(manifestFilePath);
}
string hashFilePath = _fileSystem.GetCachePackageHashFilePath(_packageVersion);
if (File.Exists(hashFilePath))
{
+ YooLogger.Warning($"Invalid package hash file has been removed: {hashFilePath}");
File.Delete(hashFilePath);
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestPackageVersionOperation.cs
similarity index 95%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestPackageVersionOperation.cs
index 776ebbc9..1cb7b422 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class SFSRequestPackageVersionOperation : FSRequestVersionOperation
+ ///
+ /// 沙盒文件系统的查询包裹版本操作
+ ///
+ internal class SFSRequestPackageVersionOperation : FSRequestPackageVersionOperation
{
private enum ESteps
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/Operations/SFSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystem.cs
index 43f417e4..8ac13622 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystem.cs
@@ -41,63 +41,58 @@ namespace YooAsset
///
/// 自定义参数:UnityWebRequest 创建委托
///
- public UnityWebRequestCreator WebRequestCreator { private set; get; }
+ public UnityWebRequestCreator WebRequestCreator { get; private set; }
///
/// 自定义参数:远程服务接口的实例类
///
- public IRemoteServices RemoteServices { private set; get; }
+ public IRemoteServices RemoteServices { get; private set; }
///
/// 自定义参数:覆盖安装缓存清理模式
///
- public EInstallCleanupMode InstallCleanupMode { private set; get; } = EInstallCleanupMode.None;
+ public EInstallCleanupMode InstallCleanupMode { get; private set; } = EInstallCleanupMode.None;
///
/// 自定义参数:初始化的时候缓存文件校验级别
///
- public EFileVerifyLevel FileVerifyLevel { private set; get; } = EFileVerifyLevel.Low;
+ public EFileVerifyLevel FileVerifyLevel { get; private set; } = EFileVerifyLevel.Low;
///
/// 自定义参数:初始化的时候缓存文件校验最大并发数
- /// 默认值:8(推荐范围 1-32)
+ /// 默认值:8(推荐值为处理器数两倍)
/// 说明:过大的值可能导致线程池任务过多,影响系统稳定性
///
- public int FileVerifyMaxConcurrency { private set; get; } = 8;
+ public int FileVerifyMaxConcurrency { get; private set; } = 8;
///
/// 自定义参数:禁用边玩边下机制
///
- public bool DisableOnDemandDownload { private set; get; } = false;
+ public bool DisableOnDemandDownload { get; private set; } = false;
///
/// 自定义参数:最大并发连接数
/// 默认值:8(推荐范围 1-32)
/// 说明:过大的并发数可能被服务器限流,也会增加本地资源消耗
///
- public int DownloadMaxConcurrency { private set; get; } = 8;
+ public int DownloadMaxConcurrency { get; private set; } = 8;
///
/// 自定义参数:每帧发起的最大请求数
/// 默认值:8(推荐范围 1-32)
/// 说明:避免单帧发起过多请求导致卡顿
///
- public int DownloadMaxRequestPerFrame { private set; get; } = 8;
+ public int DownloadMaxRequestPerFrame { get; private set; } = 8;
///
/// 自定义参数:下载任务的看门狗机制超时时间
///
- public int DownloadWatchDogTimeout { private set; get; } = 0;
+ public int DownloadWatchdogTimeout { get; private set; } = 0;
///
/// 自定义参数:启用断点续传的最小尺寸
///
- public long ResumeDownloadMinimumSize { private set; get; } = long.MaxValue;
-
- ///
- /// 自定义参数:断点续传下载器关注的错误码
- ///
- public List ResumeDownloadResponseCodes { private set; get; } = null;
+ public long ResumeDownloadMinimumSize { get; private set; } = long.MaxValue;
///
/// 自定义参数:AssetBundle 解密器
@@ -117,7 +112,17 @@ namespace YooAsset
///
/// 自定义参数:资源清单解密器
///
- public IManifestDecryptor ManifestDecryptor { private set; get; }
+ public IManifestDecryptor ManifestDecryptor { get; private set; }
+
+ ///
+ /// 自定义参数:下载重试判定策略
+ ///
+ public IDownloadRetryPolicy DownloadRetryPolicy { get; private set; }
+
+ ///
+ /// 自定义参数:URL 选择策略
+ ///
+ public IDownloadURLPolicy DownloadURLPolicy { get; private set; }
#endregion
public SandboxFileSystem()
@@ -128,26 +133,36 @@ namespace YooAsset
var operation = new SFSInitializeOperation(this);
return operation;
}
- public virtual FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options)
{
var operation = new SFSRequestPackageVersionOperation(this, options.AppendTimeTicks, options.Timeout);
return operation;
}
- public virtual FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options)
{
var operation = new SFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout);
return operation;
}
- public virtual FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options)
+ {
+ var operation = new SFSLoadPackageBundleOperation(this, options);
+ return operation;
+ }
+ public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
+ {
+ var downloader = new SFSDownloadFileOperation(this, options);
+ return downloader;
+ }
+ public virtual FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options)
{
if (options.ClearMode == EManifestClearMode.ClearAllManifestFiles.ToString())
{
- var operation = new CFSClearAllCacheManifestOperation(this);
+ var operation = new SFSClearAllCacheManifestOperation(this);
return operation;
}
else if (options.ClearMode == EManifestClearMode.ClearUnusedManifestFiles.ToString())
{
- var operation = new CFSClearUnusedCacheManifestOperation(this, options.Manifest);
+ var operation = new SFSClearUnusedCacheManifestOperation(this, options.Manifest);
return operation;
}
else
@@ -156,40 +171,30 @@ namespace YooAsset
return operation;
}
}
- public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
- {
- var downloader = new SFSDownloadFileOperation(this, options);
- return downloader;
- }
- public virtual FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options)
- {
- var operation = new SFSLoadBundleOperation(this, options);
- return operation;
- }
public virtual void SetParameter(string name, object value)
{
- if (name == FileSystemParametersDefine.DOWNLOAD_BACKEND)
+ if (name == FileSystemConsts.DOWNLOAD_BACKEND)
{
DownloadBackend = (IDownloadBackend)value;
}
- else if (name == FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR)
+ else if (name == FileSystemConsts.UNITY_WEB_REQUEST_CREATOR)
{
WebRequestCreator = (UnityWebRequestCreator)value;
}
- else if (name == FileSystemParametersDefine.REMOTE_SERVICES)
+ else if (name == FileSystemConsts.REMOTE_SERVICES)
{
RemoteServices = (IRemoteServices)value;
}
- else if (name == FileSystemParametersDefine.INSTALL_CLEAR_MODE)
+ else if (name == FileSystemConsts.INSTALL_CLEANUP_MODE)
{
InstallCleanupMode = (EInstallCleanupMode)value;
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_LEVEL)
+ else if (name == FileSystemConsts.FILE_VERIFY_LEVEL)
{
FileVerifyLevel = (EFileVerifyLevel)value;
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_MAX_CONCURRENCY)
+ else if (name == FileSystemConsts.FILE_VERIFY_MAX_CONCURRENCY)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -200,11 +205,11 @@ namespace YooAsset
// 限制在合理范围内:1-32
FileVerifyMaxConcurrency = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_DISABLE_ONDEMAND)
+ else if (name == FileSystemConsts.DOWNLOAD_DISABLE_ONDEMAND)
{
DisableOnDemandDownload = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_CONCURRENCY)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_CONCURRENCY)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -215,7 +220,7 @@ namespace YooAsset
// 限制在合理范围内:1-32
DownloadMaxConcurrency = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_MAX_REQUEST_PER_FRAME)
+ else if (name == FileSystemConsts.DOWNLOAD_MAX_REQUEST_PER_FRAME)
{
int convertValue = Convert.ToInt32(value);
if (convertValue > 32)
@@ -226,38 +231,42 @@ namespace YooAsset
// 限制在合理范围内:1-32
DownloadMaxRequestPerFrame = Mathf.Clamp(convertValue, 1, 32);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_WATCH_DOG_TIME)
+ else if (name == FileSystemConsts.DOWNLOAD_WATCHDOG_TIMEOUT)
{
int convertValue = Convert.ToInt32(value);
- DownloadWatchDogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
+ DownloadWatchdogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_RESUME_MINMUM_SIZE)
+ else if (name == FileSystemConsts.DOWNLOAD_RESUME_MINIMUM_SIZE)
{
ResumeDownloadMinimumSize = Convert.ToInt64(value);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_RESUME_RESPONSE_CODES)
- {
- ResumeDownloadResponseCodes = (List)value;
- }
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_DECRYPTOR)
{
AssetBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.RAWBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.RAWBUNDLE_DECRYPTOR)
{
RawBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_FALLBACK_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_FALLBACK_DECRYPTOR)
{
AssetBundleFallbackDecryptor = (IBundleMemoryDecryptor)value;
}
- else if (name == FileSystemParametersDefine.MANIFEST_DECRYPTOR)
+ else if (name == FileSystemConsts.MANIFEST_DECRYPTOR)
{
ManifestDecryptor = (IManifestDecryptor)value;
}
+ else if (name == FileSystemConsts.DOWNLOAD_RETRY_POLICY)
+ {
+ DownloadRetryPolicy = (IDownloadRetryPolicy)value;
+ }
+ else if (name == FileSystemConsts.DOWNLOAD_URL_POLICY)
+ {
+ DownloadURLPolicy = (IDownloadURLPolicy)value;
+ }
else
{
- YooLogger.Warning($"Invalid parameter : {name}");
+ YooLogger.Warning($"Invalid parameter: {name}");
}
}
public virtual void OnCreate(string packageName, string packageRoot)
@@ -269,9 +278,21 @@ namespace YooAsset
else
_packageRoot = packageRoot;
- _cacheBundleFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemDefine.BundleFilesFolderName);
- _cacheManifestFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemDefine.ManifestFilesFolderName);
- _tempFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemDefine.TempFilesFolderName);
+ _cacheBundleFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemConsts.BundleFilesFolderName);
+ _cacheManifestFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemConsts.ManifestFilesFolderName);
+ _tempFilesRoot = PathUtility.Combine(_packageRoot, SandboxFileSystemConsts.TempFilesFolderName);
+
+ // 创建默认的下载后台接口
+ if (DownloadBackend == null)
+ DownloadBackend = new UnityWebRequestBackend(WebRequestCreator);
+
+ // 创建默认的下载重试策略
+ if (DownloadRetryPolicy == null)
+ DownloadRetryPolicy = new DefaultDownloadRetryPolicy();
+
+ // 创建默认的 URL 选择策略
+ if (DownloadURLPolicy == null)
+ DownloadURLPolicy = new DefaultDownloadURLPolicy();
// 创建文件缓存系统
{
@@ -283,10 +304,6 @@ namespace YooAsset
cacheConfig.AssetBundleFallbackDecryptor = AssetBundleFallbackDecryptor;
FileCache = new SandboxFileCache(PackageName, _cacheBundleFilesRoot, cacheConfig);
}
-
- // 创建默认的下载后台接口
- if (DownloadBackend == null)
- DownloadBackend = new UnityWebRequestBackend(WebRequestCreator);
}
public virtual void OnDestroy()
{
@@ -298,7 +315,7 @@ namespace YooAsset
if (DownloadScheduler != null)
{
- DownloadScheduler.Dispose();
+ DownloadScheduler.AbortOperation();
DownloadScheduler = null;
}
@@ -311,7 +328,7 @@ namespace YooAsset
public virtual bool Belong(PackageBundle bundle)
{
- // 注意:沙盒文件系统保底加载!
+ // 注意:保底加载!
return true;
}
public virtual bool NeedDownload(PackageBundle bundle)
@@ -334,29 +351,52 @@ namespace YooAsset
}
#region 内部方法
+ ///
+ /// 获取默认的缓存包裹根目录
+ ///
public string GetDefaultCachePackageRoot(string packageName)
{
string rootDirectory = YooAssetSettingsData.GetYooDefaultCacheRoot();
return PathUtility.Combine(rootDirectory, packageName);
}
+
+ ///
+ /// 获取缓存清单文件的根目录
+ ///
public string GetCacheManifestFilesRoot()
{
return _cacheManifestFilesRoot;
}
+
+ ///
+ /// 获取缓存包裹哈希文件路径
+ ///
public string GetCachePackageHashFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion);
return PathUtility.Combine(_cacheManifestFilesRoot, fileName);
}
+
+ ///
+ /// 获取缓存包裹清单文件路径
+ ///
public string GetCachePackageManifestFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion);
return PathUtility.Combine(_cacheManifestFilesRoot, fileName);
}
- public string GetSandboxAppFootPrintFilePath()
+
+ ///
+ /// 获取沙盒应用程序水印文件路径
+ ///
+ public string GetSandboxAppFootprintFilePath()
{
- return PathUtility.Combine(_cacheManifestFilesRoot, SandboxFileSystemDefine.AppFootPrintFileName);
+ return PathUtility.Combine(_cacheManifestFilesRoot, SandboxFileSystemConsts.AppFootprintFileName);
}
+
+ ///
+ /// 获取临时文件路径
+ ///
public string GetTempFilePath(PackageBundle bundle)
{
if (_tempFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
@@ -388,6 +428,17 @@ namespace YooAsset
Directory.Delete(_cacheManifestFilesRoot, true);
}
}
+
+ ///
+ /// 删除所有缓存的临时文件
+ ///
+ public void DeleteAllTempFiles()
+ {
+ if (Directory.Exists(_tempFilesRoot))
+ {
+ Directory.Delete(_tempFilesRoot, true);
+ }
+ }
#endregion
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemDefine.cs b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemConsts.cs
similarity index 74%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemDefine.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemConsts.cs
index 5cd1a62d..5d17bd5a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemDefine.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemConsts.cs
@@ -1,12 +1,15 @@
-
+
namespace YooAsset
{
- internal class SandboxFileSystemDefine
+ ///
+ /// 沙盒文件系统常量定义
+ ///
+ internal class SandboxFileSystemConsts
{
///
/// 记录应用程序版本的文件名称
///
- public const string AppFootPrintFileName = "ApplicationFootPrint.bytes";
+ public const string AppFootprintFileName = "ApplicationFootprint.bytes";
///
/// 清单文件的文件夹名称
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemDefine.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemDefine.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/SandboxFileSystem/SandboxFileSystemConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSInitializeOperation.cs
index e2560494..2cf0ede2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSInitializeOperation.cs
@@ -1,11 +1,16 @@
-
+
namespace YooAsset
{
+ ///
+ /// Web远端文件系统的初始化操作
+ ///
internal class WRFSInitializeOperation : FSInitializeOperation
{
private enum ESteps
{
None,
+ CheckPlatform,
+ CheckParameter,
InitializeFileCache,
Done,
}
@@ -20,13 +25,37 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.InitializeFileCache;
+ _steps = ESteps.CheckPlatform;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.CheckPlatform)
+ {
+#if !UNITY_WEBGL
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(WebRemoteFileSystem)} only support the WebGL platform.";
+#else
+ _steps = ESteps.CheckParameter;
+#endif
+ }
+
+ if (_steps == ESteps.CheckParameter)
+ {
+ if (_fileSystem.RemoteServices == null)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(IRemoteServices)} is null.";
+ return;
+ }
+
+ _steps = ESteps.InitializeFileCache;
+ }
+
if (_steps == ESteps.InitializeFileCache)
{
if (_initializeFileCacheOp == null)
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageBundleOperation.cs
similarity index 71%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageBundleOperation.cs
index 78e27fd4..dc17c99b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageBundleOperation.cs
@@ -1,63 +1,64 @@
-
+
namespace YooAsset
{
- internal class WRFSLoadBundleOperation : FSLoadBundleOperation
+ ///
+ /// Web远端文件系统的加载资源包操作
+ ///
+ internal class WRFSLoadPackageBundleOperation : FSLoadPackageBundleOperation
{
private enum ESteps
{
None,
- LoadWebBundle,
+ LoadBundle,
Done,
}
private readonly WebRemoteFileSystem _fileSystem;
- private readonly FCLoadBundleOptions _options;
+ private readonly FSLoadPackageBundleOptions _options;
private FCLoadBundleOperation _loadBundleOp;
private ESteps _steps = ESteps.None;
- internal WRFSLoadBundleOperation(WebRemoteFileSystem fileSystem, FCLoadBundleOptions options)
+ internal WRFSLoadPackageBundleOperation(WebRemoteFileSystem fileSystem, FSLoadPackageBundleOptions options)
{
_fileSystem = fileSystem;
_options = options;
}
internal override void InternalStart()
{
- _steps = ESteps.LoadWebBundle;
+ _steps = ESteps.LoadBundle;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.LoadWebBundle)
+ if (_steps == ESteps.LoadBundle)
{
if (_loadBundleOp == null)
{
- _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options);
+ _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options.ConvertTo());
_loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp);
}
_loadBundleOp.UpdateOperation();
Progress = _loadBundleOp.Progress;
- DownloadProgress = Progress;
- DownloadedBytes = 0;
if (_loadBundleOp.IsDone == false)
return;
if (_loadBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadBundleOp.BundleResult == null)
+ if (_loadBundleOp.BundleHandle == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Loaded bundle result is null.";
+ Error = $"Loaded bundle handle is null.";
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- Result = _loadBundleOp.BundleResult;
+ BundleHandle = _loadBundleOp.BundleHandle;
}
}
else
@@ -74,7 +75,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "WebGL platform not support sync load method.";
+ Error = "WebGL platform does not support synchronous loading.";
YooLogger.Error(Error);
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageManifestOperation.cs
similarity index 90%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageManifestOperation.cs
index a3e89942..53e29648 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageManifestOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class WRFSLoadManifestOperation : FSLoadManifestOperation
+ ///
+ /// Web远端文件系统的加载包裹清单操作
+ ///
+ internal class WRFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- public WRFSLoadManifestOperation(WebRemoteFileSystem fileSystem, string packageVersion, int timeout)
+ public WRFSLoadPackageManifestOperation(WebRemoteFileSystem fileSystem, string packageVersion, int timeout)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
@@ -44,6 +47,7 @@ namespace YooAsset
options.Timeout = _timeout;
options.RemoteServices = _fileSystem.RemoteServices;
options.DownloadBackend = _fileSystem.DownloadBackend;
+ options.URLPolicy = _fileSystem.DownloadURLPolicy;
_requestWebPackageHashOp = new RequestWebPackageHashOperation(options);
_requestWebPackageHashOp.StartOperation();
AddChildOperation(_requestWebPackageHashOp);
@@ -77,6 +81,7 @@ namespace YooAsset
options.RemoteServices = _fileSystem.RemoteServices;
options.ManifestDecryptor = _fileSystem.ManifestDecryptor;
options.DownloadBackend = _fileSystem.DownloadBackend;
+ options.URLPolicy = _fileSystem.DownloadURLPolicy;
_loadWebPackageManifestOp = new LoadWebPackageManifestOperation(options);
_loadWebPackageManifestOp.StartOperation();
AddChildOperation(_loadWebPackageManifestOp);
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestPackageVersionOperation.cs
similarity index 86%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestPackageVersionOperation.cs
index ffdaf3cd..1641174a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class WRFSRequestVersionOperation : FSRequestVersionOperation
+ ///
+ /// Web远端文件系统的查询包裹版本操作
+ ///
+ internal class WRFSRequestPackageVersionOperation : FSRequestPackageVersionOperation
{
private enum ESteps
{
@@ -17,7 +20,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- internal WRFSRequestVersionOperation(WebRemoteFileSystem fileSystem, bool appendTimeTicks, int timeout)
+ internal WRFSRequestPackageVersionOperation(WebRemoteFileSystem fileSystem, bool appendTimeTicks, int timeout)
{
_fileSystem = fileSystem;
_appendTimeTicks = appendTimeTicks;
@@ -42,6 +45,7 @@ namespace YooAsset
options.Timeout = _timeout;
options.RemoteServices = _fileSystem.RemoteServices;
options.DownloadBackend = _fileSystem.DownloadBackend;
+ options.URLPolicy = _fileSystem.DownloadURLPolicy;
_requestWebPackageVersionOp = new RequestWebPackageVersionOperation(options);
_requestWebPackageVersionOp.StartOperation();
AddChildOperation(_requestWebPackageVersionOp);
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/Operations/WRFSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/WebRemoteFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/WebRemoteFileSystem.cs
index c8bd7f88..146d4584 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/WebRemoteFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebRemoteFileSystem/WebRemoteFileSystem.cs
@@ -1,5 +1,4 @@
using System;
-using System.IO;
using System.Collections.Generic;
using UnityEngine;
@@ -29,27 +28,27 @@ namespace YooAsset
///
/// 自定义参数:UnityWebRequest 创建委托
///
- public UnityWebRequestCreator WebRequestCreator { private set; get; }
+ public UnityWebRequestCreator WebRequestCreator { get; private set; }
///
- /// 禁用Unity的网络缓存
+ /// 自定义参数:禁用Unity的网络缓存
///
- public bool DisableUnityWebCache { private set; get; } = false;
+ public bool DisableUnityWebCache { get; private set; } = false;
///
/// 自定义参数:下载任务的看门狗机制超时时间
///
- public int DownloadWatchDogTimeout { private set; get; } = 0;
+ public int DownloadWatchdogTimeout { get; private set; } = 0;
///
/// 自定义参数:下载的资源包数据的校验级别
///
- public EFileVerifyLevel DownloadVerifyLevel { private set; get; } = EFileVerifyLevel.Middle;
+ public EFileVerifyLevel DownloadVerifyLevel { get; private set; } = EFileVerifyLevel.Middle;
///
/// 自定义参数:远程服务接口的实例类(支持跨域下载)
///
- public IRemoteServices RemoteServices { private set; get; }
+ public IRemoteServices RemoteServices { get; private set; }
///
/// 自定义参数:AssetBundle 解密器
@@ -59,7 +58,17 @@ namespace YooAsset
///
/// 自定义参数:资源清单解密器
///
- public IManifestDecryptor ManifestDecryptor { private set; get; }
+ public IManifestDecryptor ManifestDecryptor { get; private set; }
+
+ ///
+ /// 自定义参数:下载重试判定策略
+ ///
+ public IDownloadRetryPolicy DownloadRetryPolicy { get; private set; }
+
+ ///
+ /// 自定义参数:URL 选择策略
+ ///
+ public IDownloadURLPolicy DownloadURLPolicy { get; private set; }
#endregion
@@ -71,69 +80,77 @@ namespace YooAsset
var operation = new WRFSInitializeOperation(this);
return operation;
}
- public virtual FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options)
{
- var operation = new WRFSRequestVersionOperation(this, options.AppendTimeTicks, options.Timeout);
+ var operation = new WRFSRequestPackageVersionOperation(this, options.AppendTimeTicks, options.Timeout);
return operation;
}
- public virtual FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options)
{
- var operation = new WRFSLoadManifestOperation(this, options.PackageVersion, options.Timeout);
+ var operation = new WRFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout);
return operation;
}
- public virtual FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options)
{
- var operation = new FSClearCacheCompleteOperation();
+ var operation = new WRFSLoadPackageBundleOperation(this, options);
return operation;
}
public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
{
throw new System.NotImplementedException();
}
- public virtual FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options)
+ public virtual FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options)
{
- var operation = new WRFSLoadBundleOperation(this, options);
+ var operation = new FSClearCacheCompleteOperation();
return operation;
}
public virtual void SetParameter(string name, object value)
{
- if (name == FileSystemParametersDefine.DOWNLOAD_BACKEND)
+ if (name == FileSystemConsts.DOWNLOAD_BACKEND)
{
DownloadBackend = (IDownloadBackend)value;
}
- else if (name == FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR)
+ else if (name == FileSystemConsts.UNITY_WEB_REQUEST_CREATOR)
{
WebRequestCreator = (UnityWebRequestCreator)value;
}
- else if (name == FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE)
+ else if (name == FileSystemConsts.DISABLE_UNITY_WEB_CACHE)
{
DisableUnityWebCache = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_WATCH_DOG_TIME)
+ else if (name == FileSystemConsts.DOWNLOAD_WATCHDOG_TIMEOUT)
{
int convertValue = Convert.ToInt32(value);
- DownloadWatchDogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
+ DownloadWatchdogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_LEVEL)
+ else if (name == FileSystemConsts.FILE_VERIFY_LEVEL)
{
DownloadVerifyLevel = (EFileVerifyLevel)value;
}
- else if (name == FileSystemParametersDefine.REMOTE_SERVICES)
+ else if (name == FileSystemConsts.REMOTE_SERVICES)
{
RemoteServices = (IRemoteServices)value;
}
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_DECRYPTOR)
{
AssetBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.MANIFEST_DECRYPTOR)
+ else if (name == FileSystemConsts.MANIFEST_DECRYPTOR)
{
ManifestDecryptor = (IManifestDecryptor)value;
}
+ else if (name == FileSystemConsts.DOWNLOAD_RETRY_POLICY)
+ {
+ DownloadRetryPolicy = (IDownloadRetryPolicy)value;
+ }
+ else if (name == FileSystemConsts.DOWNLOAD_URL_POLICY)
+ {
+ DownloadURLPolicy = (IDownloadURLPolicy)value;
+ }
else
{
- YooLogger.Warning($"Invalid parameter : {name}");
+ YooLogger.Warning($"Invalid parameter: {name}");
}
}
public virtual void OnCreate(string packageName, string packageRoot)
@@ -144,14 +161,24 @@ namespace YooAsset
if (DownloadBackend == null)
DownloadBackend = new UnityWebRequestBackend(WebRequestCreator);
+ // 创建默认的下载重试策略
+ if (DownloadRetryPolicy == null)
+ DownloadRetryPolicy = new DefaultDownloadRetryPolicy();
+
+ // 创建默认的 URL 选择策略
+ if (DownloadURLPolicy == null)
+ DownloadURLPolicy = new DefaultDownloadURLPolicy();
+
// 创建Web文件缓存系统
var cacheConfig = new WebRemoteFileCache.CacheConfig();
- cacheConfig.WatchdogTimeout = DownloadWatchDogTimeout;
+ cacheConfig.WatchdogTimeout = DownloadWatchdogTimeout;
cacheConfig.DisableUnityWebCache = DisableUnityWebCache;
cacheConfig.DownloadVerifyLevel = DownloadVerifyLevel;
cacheConfig.AssetBundleDecryptor = AssetBundleDecryptor;
cacheConfig.RemoteServices = RemoteServices;
cacheConfig.DownloadBackend = DownloadBackend;
+ cacheConfig.RetryPolicy = DownloadRetryPolicy;
+ cacheConfig.URLPolicy = DownloadURLPolicy;
FileCache = new WebRemoteFileCache(packageName, packageRoot, cacheConfig);
}
public virtual void OnDestroy()
@@ -171,7 +198,8 @@ namespace YooAsset
public virtual bool Belong(PackageBundle bundle)
{
- return FileCache.IsCached(bundle.BundleGUID);
+ // 注意:保底加载!
+ return true;
}
public virtual bool NeedDownload(PackageBundle bundle)
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSInitializeOperation.cs
index 5d1c5478..f0edebff 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSInitializeOperation.cs
@@ -1,11 +1,15 @@
-
+
namespace YooAsset
{
+ ///
+ /// Web服务端文件系统的初始化操作
+ ///
internal class WSFSInitializeOperation : FSInitializeOperation
{
private enum ESteps
{
None,
+ CheckPlatform,
InitializeFileCache,
Done,
}
@@ -14,20 +18,30 @@ namespace YooAsset
private FCInitializeOperation _initializeFileCacheOp;
private ESteps _steps = ESteps.None;
-
public WSFSInitializeOperation(WebServerFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
internal override void InternalStart()
{
- _steps = ESteps.InitializeFileCache;
+ _steps = ESteps.CheckPlatform;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.CheckPlatform)
+ {
+#if !UNITY_WEBGL
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"{nameof(WebServerFileSystem)} only support the WebGL platform.";
+#else
+ _steps = ESteps.InitializeFileCache;
+#endif
+ }
+
if (_steps == ESteps.InitializeFileCache)
{
if (_initializeFileCacheOp == null)
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageBundleOperation.cs
similarity index 71%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageBundleOperation.cs
index 20fa9f82..b784590d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageBundleOperation.cs
@@ -1,63 +1,64 @@
namespace YooAsset
{
- internal class WSFSLoadAssetBundleOperation : FSLoadBundleOperation
+ ///
+ /// Web服务端文件系统的加载资源包操作
+ ///
+ internal class WSFSLoadPackageBundleOperation : FSLoadPackageBundleOperation
{
private enum ESteps
{
None,
- LoadWebBundle,
+ LoadBundle,
Done,
}
private readonly WebServerFileSystem _fileSystem;
- private readonly FCLoadBundleOptions _options;
+ private readonly FSLoadPackageBundleOptions _options;
private FCLoadBundleOperation _loadBundleOp;
private ESteps _steps = ESteps.None;
- internal WSFSLoadAssetBundleOperation(WebServerFileSystem fileSystem, FCLoadBundleOptions options)
+ internal WSFSLoadPackageBundleOperation(WebServerFileSystem fileSystem, FSLoadPackageBundleOptions options)
{
_fileSystem = fileSystem;
_options = options;
}
internal override void InternalStart()
{
- _steps = ESteps.LoadWebBundle;
+ _steps = ESteps.LoadBundle;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.LoadWebBundle)
+ if (_steps == ESteps.LoadBundle)
{
if (_loadBundleOp == null)
{
- _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options);
+ _loadBundleOp = _fileSystem.FileCache.LoadBundleAsync(_options.ConvertTo());
_loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp);
}
_loadBundleOp.UpdateOperation();
Progress = _loadBundleOp.Progress;
- DownloadProgress = Progress;
- DownloadedBytes = 0;
if (_loadBundleOp.IsDone == false)
return;
if (_loadBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadBundleOp.BundleResult == null)
+ if (_loadBundleOp.BundleHandle == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Loaded bundle result is null.";
+ Error = $"Loaded bundle handle is null.";
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- Result = _loadBundleOp.BundleResult;
+ BundleHandle = _loadBundleOp.BundleHandle;
}
}
else
@@ -74,7 +75,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "WebGL platform not support sync load method.";
+ Error = "WebGL platform does not support synchronous loading.";
YooLogger.Error(Error);
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageManifestOperation.cs
similarity index 91%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageManifestOperation.cs
index 2644179c..8d7061e2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageManifestOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class WSFSLoadManifestOperation : FSLoadManifestOperation
+ ///
+ /// Web服务端文件系统的加载包裹清单操作
+ ///
+ internal class WSFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
@@ -19,7 +22,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- public WSFSLoadManifestOperation(WebServerFileSystem fileSystem, string packageVersion, int timeout)
+ public WSFSLoadPackageManifestOperation(WebServerFileSystem fileSystem, string packageVersion, int timeout)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSLoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestPackageVersionOperation.cs
similarity index 87%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestPackageVersionOperation.cs
index a54d3b1c..a7c55f27 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestPackageVersionOperation.cs
@@ -1,7 +1,10 @@
-
+
namespace YooAsset
{
- internal class WSFSRequestVersionOperation : FSRequestVersionOperation
+ ///
+ /// Web服务端文件系统的查询包裹版本操作
+ ///
+ internal class WSFSRequestPackageVersionOperation : FSRequestPackageVersionOperation
{
private enum ESteps
{
@@ -16,7 +19,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
- internal WSFSRequestVersionOperation(WebServerFileSystem fileSystem, int timeout)
+ internal WSFSRequestPackageVersionOperation(WebServerFileSystem fileSystem, int timeout)
{
_fileSystem = fileSystem;
_timeout = timeout;
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/WSFSRequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/LoadWebServerPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/LoadWebServerPackageManifestOperation.cs
index f4d22975..951d9661 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/LoadWebServerPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/LoadWebServerPackageManifestOperation.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 加载Web服务端包裹清单文件操作
+ ///
internal class LoadWebServerPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
@@ -16,14 +19,14 @@ namespace YooAsset
private readonly string _packageVersion;
private readonly string _packageHash;
private readonly int _timeout;
- private IDownloadBytesRequest _webDataRequestOp;
- private DeserializeManifestOperation _deserializer;
+ private IDownloadBytesRequest _downloadBytesRequest;
+ private DeserializeManifestOperation _deserializeManifestOp;
private ESteps _steps = ESteps.None;
///
/// 包裹清单
///
- public PackageManifest Manifest { private set; get; }
+ public PackageManifest Manifest { get; private set; }
internal LoadWebServerPackageManifestOperation(WebServerFileSystem fileSystem, string packageVersion, string packageHash, int timeout)
@@ -44,19 +47,19 @@ namespace YooAsset
if (_steps == ESteps.RequestFileData)
{
- if (_webDataRequestOp == null)
+ if (_downloadBytesRequest == null)
{
string filePath = _fileSystem.GetWebPackageManifestFilePath(_packageVersion);
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, _timeout, 0);
- _webDataRequestOp = _fileSystem.DownloadBackend.CreateBytesRequest(args);
- _webDataRequestOp.SendRequest();
+ _downloadBytesRequest = _fileSystem.DownloadBackend.CreateBytesRequest(args);
+ _downloadBytesRequest.SendRequest();
}
- if (_webDataRequestOp.IsDone == false)
+ if (_downloadBytesRequest.IsDone == false)
return;
- if (_webDataRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadBytesRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.VerifyFileData;
}
@@ -64,13 +67,13 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webDataRequestOp.Error;
+ Error = _downloadBytesRequest.Error;
}
}
if (_steps == ESteps.VerifyFileData)
{
- if (PackageManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
+ if (PackageManifestTools.VerifyManifestData(_downloadBytesRequest.Result, _packageHash))
{
_steps = ESteps.LoadManifest;
}
@@ -84,43 +87,43 @@ namespace YooAsset
if (_steps == ESteps.LoadManifest)
{
- if (_deserializer == null)
+ if (_deserializeManifestOp == null)
{
- _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _webDataRequestOp.Result);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
+ _deserializeManifestOp = new DeserializeManifestOperation(_fileSystem.ManifestDecryptor, _downloadBytesRequest.Result);
+ _deserializeManifestOp.StartOperation();
+ AddChildOperation(_deserializeManifestOp);
}
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
+ _deserializeManifestOp.UpdateOperation();
+ Progress = _deserializeManifestOp.Progress;
+ if (_deserializeManifestOp.IsDone == false)
return;
- if (_deserializer.Status == EOperationStatus.Succeeded)
+ if (_deserializeManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
+ Manifest = _deserializeManifestOp.Manifest;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
+ Error = _deserializeManifestOp.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webDataRequestOp != null)
+ if (_downloadBytesRequest != null)
{
- _webDataRequestOp.Dispose();
- _webDataRequestOp = null;
+ _downloadBytesRequest.Dispose();
+ _downloadBytesRequest = null;
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
+ return $"PackageVersion: {_packageVersion} PackageHash: {_packageHash}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageHashOperation.cs
index eb243ffc..837df98a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageHashOperation.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 请求Web服务端包裹哈希操作
+ ///
internal class RequestWebServerPackageHashOperation : AsyncOperationBase
{
private enum ESteps
@@ -13,13 +16,13 @@ namespace YooAsset
private readonly WebServerFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly int _timeout;
- private IDownloadTextRequest _webTextRequestOp;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹哈希值
///
- public string PackageHash { private set; get; }
+ public string PackageHash { get; private set; }
public RequestWebServerPackageHashOperation(WebServerFileSystem fileSystem, string packageVersion, int timeout)
@@ -39,27 +42,27 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageHash)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string filePath = _fileSystem.GetWebPackageHashFilePath(_packageVersion);
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, _timeout, 0);
- _webTextRequestOp = _fileSystem.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _fileSystem.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- Progress = _webTextRequestOp.DownloadProgress;
- if (_webTextRequestOp.IsDone == false)
+ Progress = _downloadTextRequest.DownloadProgress;
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageHash = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageHash))
+ PackageHash = _downloadTextRequest.Result;
+ if (TextUtility.ValidateContent(PackageHash, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Web server package hash file content is empty.";
+ Error = $"Web server package hash file validate failed: {validateError}";
}
else
{
@@ -71,16 +74,16 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
+ Error = _downloadTextRequest.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageVersionOperation.cs
index fa455535..a5212ae0 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/Operations/internal/RequestWebServerPackageVersionOperation.cs
@@ -1,6 +1,9 @@
namespace YooAsset
{
+ ///
+ /// 请求Web服务端包裹版本操作
+ ///
internal class RequestWebServerPackageVersionOperation : AsyncOperationBase
{
private enum ESteps
@@ -12,13 +15,13 @@ namespace YooAsset
private readonly WebServerFileSystem _fileSystem;
private readonly int _timeout;
- private IDownloadTextRequest _webTextRequestOp;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
/// 包裹版本
///
- public string PackageVersion { private set; get; }
+ public string PackageVersion { get; private set; }
internal RequestWebServerPackageVersionOperation(WebServerFileSystem fileSystem, int timeout)
@@ -37,26 +40,26 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion)
{
- if (_webTextRequestOp == null)
+ if (_downloadTextRequest == null)
{
string filePath = _fileSystem.GetWebPackageVersionFilePath();
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, _timeout, 0);
- _webTextRequestOp = _fileSystem.DownloadBackend.CreateTextRequest(args);
- _webTextRequestOp.SendRequest();
+ _downloadTextRequest = _fileSystem.DownloadBackend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- if (_webTextRequestOp.IsDone == false)
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_webTextRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
- PackageVersion = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageVersion))
+ PackageVersion = _downloadTextRequest.Result;
+ if (TextUtility.ValidateContent(PackageVersion, out string validateError) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Web server package version file content is empty.";
+ Error = $"Web server package version file validate failed: {validateError}";
}
else
{
@@ -68,16 +71,16 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
+ Error = _downloadTextRequest.Error;
}
}
}
internal override void InternalDispose()
{
- if (_webTextRequestOp != null)
+ if (_downloadTextRequest != null)
{
- _webTextRequestOp.Dispose();
- _webTextRequestOp = null;
+ _downloadTextRequest.Dispose();
+ _downloadTextRequest = null;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/WebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/WebServerFileSystem.cs
index 39eaf4ca..4925d5aa 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/WebServerFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebServerFileSystem/WebServerFileSystem.cs
@@ -32,22 +32,22 @@ namespace YooAsset
///
/// 自定义参数:UnityWebRequest 创建委托
///
- public UnityWebRequestCreator WebRequestCreator { private set; get; }
+ public UnityWebRequestCreator WebRequestCreator { get; private set; }
///
- /// 禁用Unity的网络缓存
+ /// 自定义参数:禁用Unity的网络缓存
///
- public bool DisableUnityWebCache { private set; get; } = false;
+ public bool DisableUnityWebCache { get; private set; } = false;
///
/// 自定义参数:下载任务的看门狗机制超时时间
///
- public int DownloadWatchDogTimeout { private set; get; } = 0;
+ public int DownloadWatchdogTimeout { get; private set; } = 0;
///
/// 自定义参数:下载的资源包数据的校验级别
///
- public EFileVerifyLevel DownloadVerifyLevel { private set; get; } = EFileVerifyLevel.Middle;
+ public EFileVerifyLevel DownloadVerifyLevel { get; private set; } = EFileVerifyLevel.Middle;
///
/// 自定义参数:AssetBundle 解密器
@@ -57,7 +57,17 @@ namespace YooAsset
///
/// 自定义参数:资源清单解密器
///
- public IManifestDecryptor ManifestDecryptor { private set; get; }
+ public IManifestDecryptor ManifestDecryptor { get; private set; }
+
+ ///
+ /// 自定义参数:下载重试判定策略
+ ///
+ public IDownloadRetryPolicy DownloadRetryPolicy { get; private set; }
+
+ ///
+ /// 自定义参数:URL 选择策略
+ ///
+ public IDownloadURLPolicy DownloadURLPolicy { get; private set; }
#endregion
@@ -69,65 +79,73 @@ namespace YooAsset
var operation = new WSFSInitializeOperation(this);
return operation;
}
- public virtual FSRequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(FSRequestPackageVersionOptions options)
{
- var operation = new WSFSRequestVersionOperation(this, options.Timeout);
+ var operation = new WSFSRequestPackageVersionOperation(this, options.Timeout);
return operation;
}
- public virtual FSLoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(FSLoadPackageManifestOptions options)
{
- var operation = new WSFSLoadManifestOperation(this, options.PackageVersion, options.Timeout);
+ var operation = new WSFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout);
return operation;
}
- public virtual FSClearCacheOperation ClearCacheAsync(ClearCacheOptions options)
+ public virtual FSLoadPackageBundleOperation LoadPackageBundleAsync(FSLoadPackageBundleOptions options)
{
- var operation = new FSClearCacheCompleteOperation();
+ var operation = new WSFSLoadPackageBundleOperation(this, options);
return operation;
}
public virtual FSDownloadFileOperation DownloadFileAsync(FSDownloadFileOptions options)
{
throw new System.NotImplementedException();
}
- public virtual FSLoadBundleOperation LoadBundleAsync(FCLoadBundleOptions options)
+ public virtual FSClearCacheOperation ClearCacheAsync(FSClearCacheOptions options)
{
- var operation = new WSFSLoadAssetBundleOperation(this, options);
+ var operation = new FSClearCacheCompleteOperation();
return operation;
}
public virtual void SetParameter(string name, object value)
{
- if (name == FileSystemParametersDefine.DOWNLOAD_BACKEND)
+ if (name == FileSystemConsts.DOWNLOAD_BACKEND)
{
DownloadBackend = (IDownloadBackend)value;
}
- else if (name == FileSystemParametersDefine.UNITY_WEB_REQUEST_CREATOR)
+ else if (name == FileSystemConsts.UNITY_WEB_REQUEST_CREATOR)
{
WebRequestCreator = (UnityWebRequestCreator)value;
}
- else if (name == FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE)
+ else if (name == FileSystemConsts.DISABLE_UNITY_WEB_CACHE)
{
DisableUnityWebCache = Convert.ToBoolean(value);
}
- else if (name == FileSystemParametersDefine.DOWNLOAD_WATCH_DOG_TIME)
+ else if (name == FileSystemConsts.DOWNLOAD_WATCHDOG_TIMEOUT)
{
int convertValue = Convert.ToInt32(value);
- DownloadWatchDogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
+ DownloadWatchdogTimeout = Mathf.Clamp(convertValue, 0, int.MaxValue);
}
- else if (name == FileSystemParametersDefine.FILE_VERIFY_LEVEL)
+ else if (name == FileSystemConsts.FILE_VERIFY_LEVEL)
{
DownloadVerifyLevel = (EFileVerifyLevel)value;
}
- else if (name == FileSystemParametersDefine.ASSETBUNDLE_DECRYPTOR)
+ else if (name == FileSystemConsts.ASSETBUNDLE_DECRYPTOR)
{
AssetBundleDecryptor = (IBundleDecryptor)value;
}
- else if (name == FileSystemParametersDefine.MANIFEST_DECRYPTOR)
+ else if (name == FileSystemConsts.MANIFEST_DECRYPTOR)
{
ManifestDecryptor = (IManifestDecryptor)value;
}
+ else if (name == FileSystemConsts.DOWNLOAD_RETRY_POLICY)
+ {
+ DownloadRetryPolicy = (IDownloadRetryPolicy)value;
+ }
+ else if (name == FileSystemConsts.DOWNLOAD_URL_POLICY)
+ {
+ DownloadURLPolicy = (IDownloadURLPolicy)value;
+ }
else
{
- YooLogger.Warning($"Invalid parameter : {name}");
+ YooLogger.Warning($"Invalid parameter: {name}");
}
}
public virtual void OnCreate(string packageName, string packageRoot)
@@ -143,13 +161,23 @@ namespace YooAsset
if (DownloadBackend == null)
DownloadBackend = new UnityWebRequestBackend(WebRequestCreator);
+ // 创建默认的下载重试策略
+ if (DownloadRetryPolicy == null)
+ DownloadRetryPolicy = new DefaultDownloadRetryPolicy();
+
+ // 创建默认的 URL 选择策略
+ if (DownloadURLPolicy == null)
+ DownloadURLPolicy = new DefaultDownloadURLPolicy();
+
// 创建Web文件缓存系统
var cacheConfig = new WebServerFileCache.CacheConfig();
- cacheConfig.WatchdogTimeout = DownloadWatchDogTimeout;
+ cacheConfig.WatchdogTimeout = DownloadWatchdogTimeout;
cacheConfig.DisableUnityWebCache = DisableUnityWebCache;
cacheConfig.DownloadVerifyLevel = DownloadVerifyLevel;
cacheConfig.AssetBundleDecryptor = AssetBundleDecryptor;
cacheConfig.DownloadBackend = DownloadBackend;
+ cacheConfig.RetryPolicy = DownloadRetryPolicy;
+ cacheConfig.URLPolicy = DownloadURLPolicy;
FileCache = new WebServerFileCache(packageName, _packageRoot, cacheConfig);
}
public virtual void OnDestroy()
@@ -187,19 +215,30 @@ namespace YooAsset
#region 内部方法
protected string GetDefaultWebPackageRoot(string packageName)
{
- string rootDirectory = YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ string rootDirectory = YooAssetSettingsData.GetYooDefaultBuiltinRoot();
return PathUtility.Combine(rootDirectory, packageName);
}
+ ///
+ /// 获取Web包裹版本文件路径
+ ///
public string GetWebPackageVersionFilePath()
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(PackageName);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取Web包裹哈希文件路径
+ ///
public string GetWebPackageHashFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName);
}
+
+ ///
+ /// 获取Web包裹清单文件路径
+ ///
public string GetWebPackageManifestFilePath(string packageVersion)
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion);
diff --git a/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs b/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs
new file mode 100644
index 00000000..f9f29f7b
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs
@@ -0,0 +1,26 @@
+
+namespace YooAsset
+{
+ ///
+ /// 下载重试策略接口
+ ///
+ public interface IDownloadRetryPolicy
+ {
+ ///
+ /// 判断本次下载失败是否属于可重试的错误
+ ///
+ /// 请求地址
+ /// HTTP 状态码(0 表示网络中断或非 HTTP 错误)
+ /// HTTP 错误信息
+ /// true 允许重试;false 应立即失败
+ bool IsRetryableError(string url, long httpCode, string httpError);
+
+ ///
+ /// 计算本次重试应等待的时长(秒)
+ ///
+ /// 即将进入的重试次数(从 1 开始)
+ /// 上一次等待时长(首次时为 0)
+ /// 本次应等待的秒数
+ float ComputeDelay(int retryCount, float previousDelay);
+ }
+}
diff --git a/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs.meta b/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs.meta
new file mode 100644
index 00000000..16b2f726
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Interfaces/IDownloadRetryPolicy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f1438212bbb75f643b5cc861e8afa261
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs b/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs
new file mode 100644
index 00000000..16562fcc
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+
+namespace YooAsset
+{
+ ///
+ /// URL 选择策略接口
+ ///
+ public interface IDownloadURLPolicy
+ {
+ ///
+ /// 基于内部状态从候选列表中选择本次请求应使用的 URL。
+ ///
+ /// 候选 URL 列表(至少包含一个)
+ /// 选中的 URL
+ string SelectURL(IReadOnlyList candidateURLs);
+
+ ///
+ /// 反馈请求成功,策略可据此更新内部状态。
+ ///
+ /// 实际使用的 URL
+ void OnSuccess(string url);
+
+ ///
+ /// 反馈请求失败,策略可据此更新内部状态。
+ ///
+ /// 实际使用的 URL
+ /// HTTP 状态码(0 表示网络中断或非 HTTP 错误)
+ /// HTTP 错误信息
+ void OnFailure(string url, long httpCode, string httpError);
+ }
+}
diff --git a/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs.meta b/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs.meta
new file mode 100644
index 00000000..b1d520f0
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Interfaces/IDownloadURLPolicy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b06df95490feec942b6aadbfdc5bc36c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/Interfaces/IRemoteServices.cs b/Assets/YooAsset/Runtime/Interfaces/IRemoteServices.cs
index 041b206f..695781f7 100644
--- a/Assets/YooAsset/Runtime/Interfaces/IRemoteServices.cs
+++ b/Assets/YooAsset/Runtime/Interfaces/IRemoteServices.cs
@@ -1,18 +1,14 @@
-
+using System.Collections.Generic;
+
namespace YooAsset
{
public interface IRemoteServices
{
///
- /// 获取主资源站的资源地址
+ /// 获取指定文件的所有远端候选地址,按优先级排序。
+ /// 列表至少包含一个 URL。
///
/// 请求的文件名称
- string GetRemoteMainURL(string fileName);
-
- ///
- /// 获取备用资源站的资源地址
- ///
- /// 请求的文件名称
- string GetRemoteFallbackURL(string fileName);
+ IReadOnlyList GetRemoteURLs(string fileName);
}
-}
\ No newline at end of file
+}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/DownloadStatus.cs b/Assets/YooAsset/Runtime/ResourceManager/DownloadStatus.cs
deleted file mode 100644
index 9aa2f3bd..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/DownloadStatus.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-
-namespace YooAsset
-{
- ///
- /// 下载状态信息结构体
- ///
- public struct DownloadStatus
- {
- ///
- /// 下载是否已经完成
- ///
- public bool IsDone { get; set; }
-
- ///
- /// 下载进度(0-1f)
- ///
- public float Progress { get; set; }
-
- ///
- /// 下载文件的总大小
- ///
- public long TotalBytes { get; set; }
-
- ///
- /// 已经下载的文件大小
- ///
- public long DownloadedBytes { get; set; }
-
- ///
- /// 创建默认的下载状态实例
- ///
- public static DownloadStatus CreateDefault()
- {
- DownloadStatus status = new DownloadStatus();
- return status;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handles/HandleBase.cs b/Assets/YooAsset/Runtime/ResourceManager/Handles/HandleBase.cs
index 2a7aa8c8..87ac7f2f 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handles/HandleBase.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handles/HandleBase.cs
@@ -54,16 +54,6 @@ namespace YooAsset
return _assetInfo;
}
- ///
- /// 获取下载报告
- ///
- public DownloadStatus GetDownloadStatus()
- {
- if (IsValidWithWarning == false)
- return DownloadStatus.CreateDefault();
- return Provider.GetDownloadStatus();
- }
-
///
/// 当前状态
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handles/RawFileHandle.cs b/Assets/YooAsset/Runtime/ResourceManager/Handles/RawFileHandle.cs
index e3efd5a5..19f67f4e 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handles/RawFileHandle.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handles/RawFileHandle.cs
@@ -55,7 +55,7 @@ namespace YooAsset
{
if (IsValidWithWarning == false)
return string.Empty;
- return Provider.LoadedBundleResult.GetBundleFilePath();
+ return Provider.LoadedBundleHandle.GetBundleFilePath();
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operations/InstantiateOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operations/InstantiateOperation.cs
index 16a3dbb1..3139bca6 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operations/InstantiateOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operations/InstantiateOperation.cs
@@ -138,7 +138,7 @@ namespace YooAsset
internal override string InternalGetDescription()
{
var assetInfo = _handle.GetAssetInfo();
- return $"AssetPath : {assetInfo.AssetPath}";
+ return $"AssetPath: {assetInfo.AssetPath}";
}
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operations/Internal/LoadBundleOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operations/Internal/LoadBundleOperation.cs
index b790ec60..199d938b 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operations/Internal/LoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operations/Internal/LoadBundleOperation.cs
@@ -20,7 +20,7 @@ namespace YooAsset
private readonly ResourceManager _resourceManager;
private readonly List _providers = new List(100);
private readonly List _removeList = new List(100);
- private FSLoadBundleOperation _loadBundleOp;
+ private FSLoadPackageBundleOperation _loadPackageBundleOp;
private ESteps _steps = ESteps.None;
///
@@ -39,20 +39,9 @@ namespace YooAsset
public int RefCount { private set; get; } = 0;
///
- /// 下载进度
+ /// 资源包句柄
///
- public float DownloadProgress { set; get; } = 0;
-
- ///
- /// 下载大小
- ///
- public long DownloadedBytes { set; get; } = 0;
-
- ///
- /// 加载结果
- ///
- public IBundleResult Result { set; get; }
-
+ public IBundleHandle BundleHandle { set; get; }
internal LoadBundleOperation(ResourceManager resourceManager, BundleInfo bundleInfo)
{
@@ -84,36 +73,34 @@ namespace YooAsset
if (_steps == ESteps.LoadBundleFile)
{
- if (_loadBundleOp == null)
+ if (_loadPackageBundleOp == null)
{
// 统计计数增加
_resourceManager.IncrementBundleLoadingCounter();
- _loadBundleOp = LoadBundleInfo.CreateBundleLoader();
- _loadBundleOp.StartOperation();
- AddChildOperation(_loadBundleOp);
+ _loadPackageBundleOp = LoadBundleInfo.CreateBundleLoader();
+ _loadPackageBundleOp.StartOperation();
+ AddChildOperation(_loadPackageBundleOp);
}
if (IsWaitForCompletion)
- _loadBundleOp.WaitForCompletion();
+ _loadPackageBundleOp.WaitForCompletion();
- _loadBundleOp.UpdateOperation();
- DownloadProgress = _loadBundleOp.DownloadProgress;
- DownloadedBytes = _loadBundleOp.DownloadedBytes;
- if (_loadBundleOp.IsDone == false)
+ _loadPackageBundleOp.UpdateOperation();
+ if (_loadPackageBundleOp.IsDone == false)
return;
- if (_loadBundleOp.Status == EOperationStatus.Succeeded)
+ if (_loadPackageBundleOp.Status == EOperationStatus.Succeeded)
{
- if (_loadBundleOp.Result == null)
+ if (_loadPackageBundleOp.BundleHandle == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"The bundle loader result is null. Bundle: {LoadBundleInfo.Bundle.BundleName}";
+ Error = $"The bundle handle is null. Bundle: {LoadBundleInfo.Bundle.BundleName}";
}
else
{
_steps = ESteps.Done;
- Result = _loadBundleOp.Result;
+ BundleHandle = _loadPackageBundleOp.BundleHandle;
Status = EOperationStatus.Succeeded;
}
}
@@ -121,7 +108,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _loadBundleOp.Error;
+ Error = _loadPackageBundleOp.Error;
}
// 统计计数减少
@@ -134,7 +121,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"BundleName : {LoadBundleInfo.Bundle.BundleName}";
+ return $"BundleName: {LoadBundleInfo.Bundle.BundleName}";
}
///
@@ -167,8 +154,8 @@ namespace YooAsset
if (RefCount > 0)
throw new YooInternalException($"Cannot destroy loader with non-zero ref count {RefCount}: {LoadBundleInfo.Bundle.BundleName}");
- if (Result != null)
- Result.UnloadBundleFile();
+ if (BundleHandle != null)
+ BundleHandle.UnloadBundleFile();
if (IsDone == false)
{
@@ -277,8 +264,8 @@ namespace YooAsset
if (_steps == ESteps.LoadBundleFile)
{
// 注意:终止下载器
- if (_loadBundleOp != null)
- _loadBundleOp.AbortDownloadFile = true;
+ if (_loadPackageBundleOp != null)
+ _loadPackageBundleOp.AbortDownloadFile = true;
}
}
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadSceneOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadSceneOperation.cs
index 0ff43639..1006ccec 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadSceneOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadSceneOperation.cs
@@ -1,4 +1,4 @@
-using UnityEngine;
+using UnityEngine;
using UnityEngine.SceneManagement;
namespace YooAsset
@@ -112,7 +112,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"SceneName : {_provider.LoadedSceneName}";
+ return $"SceneName: {_provider.LoadedSceneName}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadUnusedAssetsOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadUnusedAssetsOperation.cs
index 8dbbd66c..cdb42dc5 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadUnusedAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operations/UnloadUnusedAssetsOperation.cs
@@ -59,7 +59,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"LoopCount : {_options.LoopCount}";
+ return $"LoopCount: {_options.LoopCount}";
}
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/AllAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/AllAssetsProvider.cs
index 081c77e1..195b60ff 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/AllAssetsProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/AllAssetsProvider.cs
@@ -6,16 +6,16 @@ namespace YooAsset
///
internal sealed class AllAssetsProvider : ProviderBase
{
- private FSLoadAllAssetsOperation _loadAllAssetsOp;
+ private BHLoadAllAssetsOperation _loadAllAssetsOp;
public AllAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
{
}
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
if (_loadAllAssetsOp == null)
{
- _loadAllAssetsOp = LoadedBundleResult.LoadAllAssetsAsync(MainAssetInfo);
+ _loadAllAssetsOp = LoadedBundleHandle.LoadAllAssetsAsync(MainAssetInfo);
_loadAllAssetsOp.StartOperation();
AddChildOperation(_loadAllAssetsOp);
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/AssetProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/AssetProvider.cs
index 2f129be3..15e72fbd 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/AssetProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/AssetProvider.cs
@@ -6,16 +6,16 @@ namespace YooAsset
///
internal sealed class AssetProvider : ProviderBase
{
- private FSLoadAssetOperation _loadAssetOp;
+ private BHLoadAssetOperation _loadAssetOp;
public AssetProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
{
}
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
if (_loadAssetOp == null)
{
- _loadAssetOp = LoadedBundleResult.LoadAssetAsync(MainAssetInfo);
+ _loadAssetOp = LoadedBundleHandle.LoadAssetAsync(MainAssetInfo);
_loadAssetOp.StartOperation();
AddChildOperation(_loadAssetOp);
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/ErrorProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/ErrorProvider.cs
index 5a350d18..cbcde52a 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/ErrorProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/ErrorProvider.cs
@@ -16,9 +16,9 @@ namespace YooAsset
}
///
- /// 处理资源包加载结果(空实现)
+ /// 处理资源包句柄(空实现)
///
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/ProviderBase.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/ProviderBase.cs
index 1dede9e1..eb333e77 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/ProviderBase.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/ProviderBase.cs
@@ -16,7 +16,7 @@ namespace YooAsset
None = 0,
StartBundleLoader,
WaitBundleLoader,
- ProcessBundleResult,
+ ProcessBundleHandle,
Done,
}
@@ -51,9 +51,9 @@ namespace YooAsset
public UnityEngine.SceneManagement.Scene SceneObject { protected set; get; }
///
- /// 加载的资源包结果
+ /// 加载的资源包句柄
///
- public IBundleResult LoadedBundleResult { protected set; get; }
+ public IBundleHandle LoadedBundleHandle { protected set; get; }
///
/// 加载的场景名称
@@ -77,7 +77,7 @@ namespace YooAsset
{
get
{
- return _steps == ESteps.WaitBundleLoader || _steps == ESteps.ProcessBundleResult;
+ return _steps == ESteps.WaitBundleLoader || _steps == ESteps.ProcessBundleHandle;
}
}
@@ -174,20 +174,20 @@ namespace YooAsset
}
// 检测加载结果
- LoadedBundleResult = _mainBundleLoader.Result;
- if (LoadedBundleResult == null)
+ LoadedBundleHandle = _mainBundleLoader.BundleHandle;
+ if (LoadedBundleHandle == null)
{
- string error = $"Loaded bundle result is null.";
+ string error = $"Loaded bundle handle is null.";
InvokeCompletion(error, EOperationStatus.Failed);
return;
}
- _steps = ESteps.ProcessBundleResult;
+ _steps = ESteps.ProcessBundleHandle;
}
- if (_steps == ESteps.ProcessBundleResult)
+ if (_steps == ESteps.ProcessBundleHandle)
{
- ProcessBundleResult();
+ ProcessBundleHandle();
}
}
internal override void InternalWaitForCompletion()
@@ -196,13 +196,13 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"AssetPath : {MainAssetInfo.AssetPath}";
+ return $"AssetPath: {MainAssetInfo.AssetPath}";
}
///
- /// 处理资源包加载结果,由子类实现具体逻辑
+ /// 处理资源包句柄,由子类实现具体逻辑
///
- protected abstract void ProcessBundleResult();
+ protected abstract void ProcessBundleHandle();
///
/// 销毁资源提供者
@@ -316,26 +316,6 @@ namespace YooAsset
}
}
- ///
- /// 获取下载报告
- ///
- public DownloadStatus GetDownloadStatus()
- {
- DownloadStatus status = new DownloadStatus();
- foreach (var bundleLoader in _bundleLoaders)
- {
- status.TotalBytes += bundleLoader.LoadBundleInfo.Bundle.FileSize;
- status.DownloadedBytes += bundleLoader.DownloadedBytes;
- }
-
- if (status.TotalBytes == 0)
- throw new YooInternalException("Download total size cannot be zero.");
-
- status.IsDone = status.DownloadedBytes == status.TotalBytes;
- status.Progress = (float)status.DownloadedBytes / status.TotalBytes;
- return status;
- }
-
#region 调试信息
///
/// 资源加载时的活跃场景(资源出生的场景)
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/RawFileProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/RawFileProvider.cs
index cd3032cd..6f38fdd9 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/RawFileProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/RawFileProvider.cs
@@ -9,7 +9,7 @@ namespace YooAsset
public RawFileProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
{
}
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
InvokeCompletion(string.Empty, EOperationStatus.Succeeded);
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/SceneProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/SceneProvider.cs
index 3287ade1..d0cff18a 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/SceneProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/SceneProvider.cs
@@ -11,21 +11,21 @@ namespace YooAsset
///
internal sealed class SceneProvider : ProviderBase
{
- private readonly LoadSceneParameters _loadParams;
+ private readonly LoadSceneParameters _loadSceneParams;
private bool _suspendLoad;
- private FSLoadSceneOperation _loadSceneOp;
+ private BHLoadSceneOperation _loadSceneOp;
- public SceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad) : base(manager, providerGUID, assetInfo)
+ public SceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad) : base(manager, providerGUID, assetInfo)
{
- _loadParams = loadParams;
+ _loadSceneParams = loadSceneParams;
_suspendLoad = suspendLoad;
LoadedSceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
}
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
if (_loadSceneOp == null)
{
- _loadSceneOp = LoadedBundleResult.LoadSceneOperation(MainAssetInfo, _loadParams, _suspendLoad);
+ _loadSceneOp = LoadedBundleHandle.LoadSceneAsync(MainAssetInfo, _loadSceneParams, _suspendLoad);
_loadSceneOp.StartOperation();
AddChildOperation(_loadSceneOp);
}
@@ -35,7 +35,7 @@ namespace YooAsset
// 注意:场景加载中途可以取消挂起
if (_suspendLoad == false)
- _loadSceneOp.UnSuspendLoad();
+ _loadSceneOp.ResumeLoad();
_loadSceneOp.UpdateOperation();
Progress = _loadSceneOp.Progress;
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Providers/SubAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Providers/SubAssetsProvider.cs
index 9109ab73..cb37268d 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Providers/SubAssetsProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Providers/SubAssetsProvider.cs
@@ -6,16 +6,16 @@ namespace YooAsset
///
internal sealed class SubAssetsProvider : ProviderBase
{
- private FSLoadSubAssetsOperation _loadSubAssetsOp;
+ private BHLoadSubAssetsOperation _loadSubAssetsOp;
public SubAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
{
}
- protected override void ProcessBundleResult()
+ protected override void ProcessBundleHandle()
{
if (_loadSubAssetsOp == null)
{
- _loadSubAssetsOp = LoadedBundleResult.LoadSubAssetsAsync(MainAssetInfo);
+ _loadSubAssetsOp = LoadedBundleHandle.LoadSubAssetsAsync(MainAssetInfo);
_loadSubAssetsOp.StartOperation();
AddChildOperation(_loadSubAssetsOp);
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs b/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
index a25d87dd..32224d02 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
@@ -44,10 +44,10 @@ namespace YooAsset
/// 创建资源包加载器
///
/// 返回资源包加载操作对象
- public FSLoadBundleOperation CreateBundleLoader()
+ public FSLoadPackageBundleOperation CreateBundleLoader()
{
- var options = new FCLoadBundleOptions(Bundle);
- return _fileSystem.LoadBundleAsync(options);
+ var options = new FSLoadPackageBundleOptions(Bundle);
+ return _fileSystem.LoadPackageBundleAsync(options);
}
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOperation.cs
index 36e8b6d5..04832c3c 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOperation.cs
@@ -75,7 +75,7 @@ namespace YooAsset
var fileSystem = _cloneList[0];
_cloneList.RemoveAt(0);
- _clearCacheFilesOp = fileSystem.ClearCacheAsync(_options);
+ _clearCacheFilesOp = fileSystem.ClearCacheAsync(_options.ConvertTo());
_clearCacheFilesOp.StartOperation();
AddChildOperation(_clearCacheFilesOp);
_steps = ESteps.CheckClearResult;
@@ -103,7 +103,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"ClearMode : {_options.ClearMode}";
+ return $"ClearMode: {_options.ClearMode}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOptions.cs
index 8c2e6156..07ee4f24 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOptions.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/ClearCacheOptions.cs
@@ -78,5 +78,17 @@ namespace YooAsset
ClearParam = clearParam;
Manifest = null;
}
+
+ ///
+ /// 转换为 FileSystem 的清理缓存选项
+ ///
+ internal FSClearCacheOptions ConvertTo()
+ {
+ var options = new FSClearCacheOptions();
+ options.ClearMode = ClearMode;
+ options.ClearParam = ClearParam;
+ options.Manifest = Manifest;
+ return options;
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/DestroyPackageOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/DestroyPackageOperation.cs
index 65ce479a..df743fd6 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/DestroyPackageOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/DestroyPackageOperation.cs
@@ -104,7 +104,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_resourcePackage.GetPackageVersion()}";
+ return $"PackageVersion: {_resourcePackage.GetPackageVersion()}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/DownloaderOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/DownloaderOperation.cs
index d1f1916a..354b43c2 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/DownloaderOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/DownloaderOperation.cs
@@ -149,7 +149,7 @@ namespace YooAsset
foreach (var downloader in _downloaders)
{
downloader.UpdateOperation();
- downloadBytes += downloader.DownloadedBytes;
+ downloadBytes += downloader.Report.DownloadedBytes;
if (downloader.IsDone == false)
continue;
@@ -164,7 +164,7 @@ namespace YooAsset
// 下载成功
_removeList.Add(downloader);
_completedDownloadCount++;
- _completedDownloadBytes += downloader.DownloadedBytes;
+ _completedDownloadBytes += downloader.Report.DownloadedBytes;
}
// 移除已经完成的下载器(无论成功或失败)
@@ -238,7 +238,7 @@ namespace YooAsset
string bundleName = failedDownloader.Bundle.BundleName;
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Failed to download file : {bundleName}";
+ Error = $"Failed to download file: {bundleName}";
if (DownloadErrorHandler != null)
{
@@ -381,7 +381,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "User cancel.";
+ Error = "Cancelled by user.";
foreach (var downloader in _downloaders)
{
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/InitializePackageOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/InitializePackageOperation.cs
index bee62014..fb8a3768 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/InitializePackageOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/InitializePackageOperation.cs
@@ -12,7 +12,6 @@ namespace YooAsset
None,
SetPlayMode,
CheckOptions,
- CheckPlatform,
CreateCore,
InitFileSystem,
Done,
@@ -69,50 +68,6 @@ namespace YooAsset
return;
}
- _steps = ESteps.CheckPlatform;
- }
-
- if (_steps == ESteps.CheckPlatform)
- {
-#if !UNITY_EDITOR
- if (_playMode == EPlayMode.EditorSimulateMode)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Editor simulate mode only support unity editor.";
- YooLogger.Error(Error);
- return;
- }
-#endif
-
-#if UNITY_WEBGL
- if (_playMode != EPlayMode.EditorSimulateMode)
- {
- if (_playMode != EPlayMode.WebPlayMode)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"{_playMode} does not support WebGL platform.";
- YooLogger.Error(Error);
- return;
- }
- }
-#endif
-
-#if !UNITY_WEBGL
- if (_playMode != EPlayMode.EditorSimulateMode)
- {
- if (_playMode == EPlayMode.WebPlayMode)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"{nameof(EPlayMode.WebPlayMode)} only supports WebGL platform.";
- YooLogger.Error(Error);
- return;
- }
- }
-#endif
-
_steps = ESteps.CreateCore;
}
@@ -186,7 +141,7 @@ namespace YooAsset
}
internal override string InternalGetDescription()
{
- return $"PlayMode : {_playMode}";
+ return $"PlayMode: {_playMode}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/DeserializeManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/DeserializeManifestOperation.cs
index afa3f03d..52e4a383 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/DeserializeManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/DeserializeManifestOperation.cs
@@ -75,7 +75,7 @@ namespace YooAsset
// 读取文件标记
uint fileSign = _buffer.ReadUInt32();
- if (fileSign != PackageManifestDefine.FileSignature)
+ if (fileSign != PackageManifestConsts.FileSignature)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
@@ -86,13 +86,13 @@ namespace YooAsset
// 读取文件版本
string fileVersion = _buffer.ReadUTF8();
Version fileVer = new Version(fileVersion);
- Version ver2025_8_28 = new Version(PackageManifestDefine.VERSION_2025_8_28);
- Version ver2025_9_30 = new Version(PackageManifestDefine.VERSION_2025_9_30);
+ Version ver2025_8_28 = new Version(PackageManifestConsts.VERSION_2025_8_28);
+ Version ver2025_9_30 = new Version(PackageManifestConsts.VERSION_2025_9_30);
if (fileVer < ver2025_8_28)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"The manifest version is lower than the minimum compatible version : {fileVer} < {ver2025_8_28}";
+ Error = $"The manifest version is lower than the minimum compatible version: {fileVer} < {ver2025_8_28}";
return;
}
@@ -116,9 +116,9 @@ namespace YooAsset
// 检测配置
if (Manifest.EnableAddressable && Manifest.LocationToLower)
- throw new YooManifestException("Addressable not support location to lower.");
+ throw new YooManifestException("Addressable mode does not support converting locations to lowercase.");
if (Manifest.EnableAddressable == false && Manifest.ReplaceAssetPathWithAddress)
- throw new YooManifestException("Replace asset path with address need enable Addressable.");
+ throw new YooManifestException("Replacing asset path with address requires Addressable to be enabled.");
_steps = ESteps.PrepareAssetList;
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/InitializeFileSystemOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/InitializeFileSystemOperation.cs
index 695ae56a..f5fe9f30 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/InitializeFileSystemOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/Internal/InitializeFileSystemOperation.cs
@@ -43,7 +43,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = "The file system parameters is empty.";
+ Error = "The file system parameters are empty.";
return;
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOperation.cs
similarity index 70%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOperation.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOperation.cs
index c6a10587..1ecf8bee 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOperation.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 加载资源清单操作
///
- public sealed class LoadManifestOperation : AsyncOperationBase
+ public sealed class LoadPackageManifestOperation : AsyncOperationBase
{
private enum ESteps
{
@@ -16,11 +16,11 @@ namespace YooAsset
}
private readonly FileSystemHost _host;
- private readonly LoadManifestOptions _options;
- private FSLoadManifestOperation _loadPackageManifestOp;
+ private readonly LoadPackageManifestOptions _options;
+ private FSLoadPackageManifestOperation _loadManifestOp;
private ESteps _steps = ESteps.None;
- internal LoadManifestOperation(FileSystemHost host, LoadManifestOptions options)
+ internal LoadPackageManifestOperation(FileSystemHost host, LoadPackageManifestOptions options)
{
_host = host;
_options = options;
@@ -64,35 +64,35 @@ namespace YooAsset
if (_steps == ESteps.LoadPackageManifest)
{
- if (_loadPackageManifestOp == null)
+ if (_loadManifestOp == null)
{
var mainFileSystem = _host.GetMainFileSystem();
- _loadPackageManifestOp = mainFileSystem.LoadManifestAsync(_options);
- _loadPackageManifestOp.StartOperation();
- AddChildOperation(_loadPackageManifestOp);
+ _loadManifestOp = mainFileSystem.LoadPackageManifestAsync(_options.ConvertTo());
+ _loadManifestOp.StartOperation();
+ AddChildOperation(_loadManifestOp);
}
- _loadPackageManifestOp.UpdateOperation();
- if (_loadPackageManifestOp.IsDone == false)
+ _loadManifestOp.UpdateOperation();
+ if (_loadManifestOp.IsDone == false)
return;
- if (_loadPackageManifestOp.Status == EOperationStatus.Succeeded)
+ if (_loadManifestOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- _host.SetActiveManifest(_loadPackageManifestOp.Manifest);
+ _host.SetActiveManifest(_loadManifestOp.Manifest);
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _loadPackageManifestOp.Error;
+ Error = _loadManifestOp.Error;
}
}
}
internal override string InternalGetDescription()
{
- return $"PackageVersion : {_options.PackageVersion}";
+ return $"PackageVersion: {_options.PackageVersion}";
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOptions.cs
similarity index 62%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOptions.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOptions.cs
index b250fa41..4e4e714c 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOptions.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOptions.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 加载清单选项
///
- public struct LoadManifestOptions
+ public struct LoadPackageManifestOptions
{
///
/// 包裹版本
@@ -21,10 +21,18 @@ namespace YooAsset
///
/// 包裹版本
/// 超时时间(秒)
- public LoadManifestOptions(string packageVersion, int timeout)
+ public LoadPackageManifestOptions(string packageVersion, int timeout)
{
PackageVersion = packageVersion;
Timeout = timeout;
}
+
+ ///
+ /// 转换为 FileSystem 的加载清单选项
+ ///
+ internal FSLoadPackageManifestOptions ConvertTo()
+ {
+ return new FSLoadPackageManifestOptions(PackageVersion, Timeout);
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOptions.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadManifestOptions.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/LoadPackageManifestOptions.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOperation.cs
similarity index 84%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOperation.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOperation.cs
index de6627d2..937842f8 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOperation.cs
@@ -5,9 +5,9 @@ using System.Collections.Generic;
namespace YooAsset
{
///
- /// 预下载操作,用于提前下载指定版本的资源
+ /// 预取清单操作,用于提前加载指定版本的资源清单
///
- public sealed class PreDownloaderOperation : AsyncOperationBase
+ public sealed class PrefetchManifestOperation : AsyncOperationBase
{
private enum ESteps
{
@@ -19,13 +19,13 @@ namespace YooAsset
}
private readonly FileSystemHost _host;
- private readonly PreDownloaderOptions _options;
- private FSLoadManifestOperation _loadPackageManifestOp;
+ private readonly PrefetchManifestOptions _options;
+ private FSLoadPackageManifestOperation _loadPackageManifestOp;
private PackageManifest _manifest;
private ESteps _steps = ESteps.None;
- internal PreDownloaderOperation(FileSystemHost host, PreDownloaderOptions options)
+ internal PrefetchManifestOperation(FileSystemHost host, PrefetchManifestOptions options)
{
_host = host;
_options = options;
@@ -73,8 +73,8 @@ namespace YooAsset
if (_loadPackageManifestOp == null)
{
var mainFileSystem = _host.GetMainFileSystem();
- var options = new LoadManifestOptions(_options.PackageVersion, _options.Timeout);
- _loadPackageManifestOp = mainFileSystem.LoadManifestAsync(options);
+ var options = new LoadPackageManifestOptions(_options.PackageVersion, _options.Timeout);
+ _loadPackageManifestOp = mainFileSystem.LoadPackageManifestAsync(options.ConvertTo());
_loadPackageManifestOp.StartOperation();
AddChildOperation(_loadPackageManifestOp);
}
@@ -105,7 +105,7 @@ namespace YooAsset
{
if (Status != EOperationStatus.Succeeded)
{
- YooLogger.Error($"{nameof(PreDownloaderOperation)} did not succeed.");
+ YooLogger.Error($"{nameof(PrefetchManifestOperation)} did not succeed.");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName);
}
@@ -119,7 +119,7 @@ namespace YooAsset
{
if (Status != EOperationStatus.Succeeded)
{
- YooLogger.Error($"{nameof(PreDownloaderOperation)} did not succeed.");
+ YooLogger.Error($"{nameof(PrefetchManifestOperation)} did not succeed.");
return ResourceDownloaderOperation.CreateEmptyDownloader(_host.PackageName);
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOperation.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOptions.cs
similarity index 64%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOptions.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOptions.cs
index 284b54e3..bb52231a 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOptions.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOptions.cs
@@ -2,12 +2,12 @@
namespace YooAsset
{
///
- /// 预下载选项
+ /// 预取清单选项
///
- public struct PreDownloaderOptions
+ public struct PrefetchManifestOptions
{
///
- /// 预下载的包裹版本
+ /// 预取的包裹版本
///
public string PackageVersion { get; set; }
@@ -17,11 +17,11 @@ namespace YooAsset
public int Timeout { get; set; }
///
- /// 创建预下载选项
+ /// 创建预取清单选项
///
- /// 预下载的包裹版本
+ /// 预取的包裹版本
/// 资源清单请求超时时间(秒)
- public PreDownloaderOptions(string packageVersion, int timeout)
+ public PrefetchManifestOptions(string packageVersion, int timeout)
{
PackageVersion = packageVersion;
Timeout = timeout;
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOptions.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/PreDownloaderOptions.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/PrefetchManifestOptions.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOperation.cs
similarity index 59%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOperation.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOperation.cs
index ec07b390..9da110f5 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOperation.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 请求包裹版本操作
///
- public sealed class RequestVersionOperation : AsyncOperationBase
+ public sealed class RequestPackageVersionOperation : AsyncOperationBase
{
private enum ESteps
{
@@ -14,8 +14,8 @@ namespace YooAsset
}
private readonly FileSystemHost _host;
- private readonly RequestVersionOptions _options;
- private FSRequestVersionOperation _requestPackageVersionOp;
+ private readonly RequestPackageVersionOptions _options;
+ private FSRequestPackageVersionOperation _requestVersionOp;
private ESteps _steps = ESteps.None;
///
@@ -24,7 +24,7 @@ namespace YooAsset
public string PackageVersion { get; private set; }
- internal RequestVersionOperation(FileSystemHost host, RequestVersionOptions options)
+ internal RequestPackageVersionOperation(FileSystemHost host, RequestPackageVersionOptions options)
{
_host = host;
_options = options;
@@ -40,29 +40,29 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion)
{
- if (_requestPackageVersionOp == null)
+ if (_requestVersionOp == null)
{
var mainFileSystem = _host.GetMainFileSystem();
- _requestPackageVersionOp = mainFileSystem.RequestVersionAsync(_options);
- _requestPackageVersionOp.StartOperation();
- AddChildOperation(_requestPackageVersionOp);
+ _requestVersionOp = mainFileSystem.RequestPackageVersionAsync(_options.ConvertTo());
+ _requestVersionOp.StartOperation();
+ AddChildOperation(_requestVersionOp);
}
- _requestPackageVersionOp.UpdateOperation();
- if (_requestPackageVersionOp.IsDone == false)
+ _requestVersionOp.UpdateOperation();
+ if (_requestVersionOp.IsDone == false)
return;
- if (_requestPackageVersionOp.Status == EOperationStatus.Succeeded)
+ if (_requestVersionOp.Status == EOperationStatus.Succeeded)
{
_steps = ESteps.Done;
- PackageVersion = _requestPackageVersionOp.PackageVersion;
+ PackageVersion = _requestVersionOp.PackageVersion;
Status = EOperationStatus.Succeeded;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _requestPackageVersionOp.Error;
+ Error = _requestVersionOp.Error;
}
}
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOptions.cs
similarity index 63%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOptions.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOptions.cs
index 72660759..233d00f4 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOptions.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOptions.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 请求版本选项
///
- public struct RequestVersionOptions
+ public struct RequestPackageVersionOptions
{
///
/// 在URL末尾添加时间戳
@@ -21,10 +21,18 @@ namespace YooAsset
///
/// 是否在URL末尾添加时间戳
/// 超时时间(秒)
- public RequestVersionOptions(bool appendTimeTicks, int timeout)
+ public RequestPackageVersionOptions(bool appendTimeTicks, int timeout)
{
AppendTimeTicks = appendTimeTicks;
Timeout = timeout;
}
+
+ ///
+ /// 转换为 FileSystem 的请求版本选项
+ ///
+ internal FSRequestPackageVersionOptions ConvertTo()
+ {
+ return new FSRequestPackageVersionOptions(AppendTimeTicks, Timeout);
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOptions.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestVersionOptions.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/Operations/RequestPackageVersionOptions.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
index 8f389048..2ae95d1b 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
@@ -134,7 +134,7 @@ namespace YooAsset
}
else
{
- throw new YooManifestException($"Invalid bundle ID : {bundleID}. Valid range is 0 to {BundleList.Count - 1}");
+ throw new YooManifestException($"Invalid bundle ID: {bundleID}. Valid range is 0 to {BundleList.Count - 1}");
}
}
@@ -207,7 +207,7 @@ namespace YooAsset
}
else
{
- throw new YooManifestException($"Invalid bundle ID : {bundleID}. Valid range is 0 to {BundleList.Count - 1}");
+ throw new YooManifestException($"Invalid bundle ID: {bundleID}. Valid range is 0 to {BundleList.Count - 1}");
}
}
@@ -367,7 +367,7 @@ namespace YooAsset
if (string.IsNullOrEmpty(location))
error = $"The location is null or empty.";
else
- error = $"The location is invalid : {location}";
+ error = $"The location is invalid: {location}";
AssetInfo assetInfo = new AssetInfo(PackageName, error);
return assetInfo;
}
@@ -418,7 +418,7 @@ namespace YooAsset
if (string.IsNullOrEmpty(assetGUID))
error = $"The assetGUID is null or empty.";
else
- error = $"The assetGUID is invalid : {assetGUID}";
+ error = $"The asset GUID is invalid: {assetGUID}";
AssetInfo assetInfo = new AssetInfo(PackageName, error);
return assetInfo;
}
@@ -453,11 +453,11 @@ namespace YooAsset
if (index != -1)
{
if (location.Length == index + 1)
- YooLogger.Warning($"Found blank character in location : \"{location}\"");
+ YooLogger.Warning($"Found blank character in location: \"{location}\"");
}
if (location.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
- YooLogger.Warning($"Found illegal character in location : \"{location}\"");
+ YooLogger.Warning($"Found illegal character in location: \"{location}\"");
}
}
#endregion
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestDefine.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestConsts.cs
similarity index 95%
rename from Assets/YooAsset/Runtime/ResourcePackage/PackageManifestDefine.cs
rename to Assets/YooAsset/Runtime/ResourcePackage/PackageManifestConsts.cs
index 16d79c83..ceb7ef81 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestDefine.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestConsts.cs
@@ -4,7 +4,7 @@ namespace YooAsset
///
/// 清单文件常量定义
///
- internal class PackageManifestDefine
+ internal class PackageManifestConsts
{
///
/// 文件极限大小(100MB)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestDefine.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestConsts.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/ResourcePackage/PackageManifestDefine.cs.meta
rename to Assets/YooAsset/Runtime/ResourcePackage/PackageManifestConsts.cs.meta
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestTools.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestTools.cs
index 1c0848dd..80a2b2c7 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestTools.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifestTools.cs
@@ -61,10 +61,10 @@ namespace YooAsset
using (FileStream fs = new FileStream(savePath, FileMode.Create))
{
// 创建缓存器
- BufferWriter buffer = new BufferWriter(PackageManifestDefine.MaxFileSize);
+ BufferWriter buffer = new BufferWriter(PackageManifestConsts.MaxFileSize);
// 写入文件标记
- buffer.WriteUInt32(PackageManifestDefine.FileSignature);
+ buffer.WriteUInt32(PackageManifestConsts.FileSignature);
// 写入文件版本
buffer.WriteUTF8(manifest.FileVersion);
@@ -204,7 +204,7 @@ namespace YooAsset
}
default:
- throw new NotImplementedException($"Invalid name style : {nameStyle}");
+ throw new NotImplementedException($"Invalid name style: {nameStyle}");
}
}
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
index 35cff453..0152fa73 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
@@ -126,11 +126,11 @@ namespace YooAsset
/// 请求最新的资源版本
/// 说明:超时时间默认60秒
///
- public RequestVersionOperation RequestVersionAsync()
+ public RequestPackageVersionOperation RequestPackageVersionAsync()
{
int defaultTimeout = 60;
- var options = new RequestVersionOptions(true, defaultTimeout);
- return RequestVersionAsync(options);
+ var options = new RequestPackageVersionOptions(true, defaultTimeout);
+ return RequestPackageVersionAsync(options);
}
///
@@ -138,10 +138,10 @@ namespace YooAsset
///
/// 请求版本选项
/// 返回请求版本操作对象
- public RequestVersionOperation RequestVersionAsync(RequestVersionOptions options)
+ public RequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options)
{
CheckInitialized(false);
- var operation = new RequestVersionOperation(_fileSystemHost, options);
+ var operation = new RequestPackageVersionOperation(_fileSystemHost, options);
AsyncOperationSystem.StartOperation(PackageName, operation);
return operation;
}
@@ -151,7 +151,7 @@ namespace YooAsset
///
/// 加载清单选项
/// 返回加载清单操作对象
- public LoadManifestOperation LoadManifestAsync(LoadManifestOptions options)
+ public LoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options)
{
CheckInitialized(false);
@@ -161,20 +161,20 @@ namespace YooAsset
YooLogger.Warning($"Found loaded bundles before updating the manifest. It is recommended to call the {nameof(UnloadAllAssetsAsync)} method to release loaded bundles.");
}
- var operation = new LoadManifestOperation(_fileSystemHost, options);
+ var operation = new LoadPackageManifestOperation(_fileSystemHost, options);
AsyncOperationSystem.StartOperation(PackageName, operation);
return operation;
}
///
- /// 预下载指定版本的包裹资源
+ /// 预取指定版本的包裹资源清单
///
- /// 预下载选项
- /// 返回预下载操作对象
- public PreDownloaderOperation PreDownloaderAsync(PreDownloaderOptions options)
+ /// 预取清单选项
+ /// 返回预取清单操作对象
+ public PrefetchManifestOperation PrefetchManifestAsync(PrefetchManifestOptions options)
{
CheckInitialized(false);
- var operation = new PreDownloaderOperation(_fileSystemHost, options);
+ var operation = new PrefetchManifestOperation(_fileSystemHost, options);
AsyncOperationSystem.StartOperation(PackageName, operation);
return operation;
}
@@ -933,10 +933,10 @@ namespace YooAsset
return;
if (typeof(UnityEngine.Behaviour).IsAssignableFrom(type))
- throw new YooLoadException($"Load asset type is invalid : {type.FullName}");
+ throw new YooLoadException($"Load asset type is invalid: {type.FullName}");
if (typeof(UnityEngine.Object).IsAssignableFrom(type) == false)
- throw new YooLoadException($"Load asset type is invalid : {type.FullName}");
+ throw new YooLoadException($"Load asset type is invalid: {type.FullName}");
}
#endregion
diff --git a/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs b/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
index ed3d40c7..cf92f511 100644
--- a/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
+++ b/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
@@ -191,7 +191,7 @@ namespace YooAsset
///
/// 获取YOO默认的内置文件根目录
///
- internal static string GetYooDefaultBuildinRoot()
+ internal static string GetYooDefaultBuiltinRoot()
{
if (string.IsNullOrEmpty(Setting.DefaultYooFolderName))
return Application.streamingAssetsPath;
diff --git a/Assets/YooAsset/Runtime/Utility/Utilities/FileUtility.cs b/Assets/YooAsset/Runtime/Utility/Utilities/FileUtility.cs
index dc08fa8b..55c50f12 100644
--- a/Assets/YooAsset/Runtime/Utility/Utilities/FileUtility.cs
+++ b/Assets/YooAsset/Runtime/Utility/Utilities/FileUtility.cs
@@ -10,6 +10,18 @@ namespace YooAsset
///
internal static class FileUtility
{
+ ///
+ /// 检查文件路径是否支持 FileIO 读取
+ ///
+ public static bool SupportsFileIO(string filePath)
+ {
+ if (string.IsNullOrEmpty(filePath))
+ return false;
+ if (filePath.StartsWith("jar:") || filePath.StartsWith("content:"))
+ return false;
+ return true;
+ }
+
///
/// 读取文件的文本数据
///
diff --git a/Assets/YooAsset/Runtime/Utility/Utilities/PathUtility.cs b/Assets/YooAsset/Runtime/Utility/Utilities/PathUtility.cs
index f14bf6b2..911901fc 100644
--- a/Assets/YooAsset/Runtime/Utility/Utilities/PathUtility.cs
+++ b/Assets/YooAsset/Runtime/Utility/Utilities/PathUtility.cs
@@ -50,7 +50,8 @@ namespace YooAsset
///
public static string Combine(string path1, string path2)
{
- return StringUtility.Format("{0}/{1}", path1, path2);
+ // 注意:某些静态服务器的规则可能不接受双斜杠路径
+ return StringUtility.Format("{0}/{1}", path1.TrimEnd('/'), path2.Trim('/'));
}
///
@@ -58,7 +59,8 @@ namespace YooAsset
///
public static string Combine(string path1, string path2, string path3)
{
- return StringUtility.Format("{0}/{1}/{2}", path1, path2, path3);
+ // 注意:某些静态服务器的规则可能不接受双斜杠路径
+ return StringUtility.Format("{0}/{1}/{2}", path1.TrimEnd('/'), path2.Trim('/'), path3.Trim('/'));
}
///
@@ -66,7 +68,8 @@ namespace YooAsset
///
public static string Combine(string path1, string path2, string path3, string path4)
{
- return StringUtility.Format("{0}/{1}/{2}/{3}", path1, path2, path3, path4);
+ // 注意:某些静态服务器的规则可能不接受双斜杠路径
+ return StringUtility.Format("{0}/{1}/{2}/{3}", path1.TrimEnd('/'), path2.Trim('/'), path3.Trim('/'), path4.Trim('/'));
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs b/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs
new file mode 100644
index 00000000..40ef4fdd
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs
@@ -0,0 +1,48 @@
+
+namespace YooAsset
+{
+ ///
+ /// 文本工具类
+ ///
+ internal static class TextUtility
+ {
+ ///
+ /// 严格校验文本文件内容是否合法
+ ///
+ /// 待校验的文本内容
+ /// 校验失败时的错误描述
+ /// 校验通过返回true,否则返回false
+ public static bool ValidateContent(string content, out string error)
+ {
+ if (string.IsNullOrEmpty(content))
+ {
+ error = "Text content is null or empty.";
+ return false;
+ }
+
+ // 检验BOM
+ if (content[0] == '\uFEFF')
+ {
+ error = "Text content contains UTF-8 BOM character.";
+ return false;
+ }
+
+ // 检验换行符
+ if (content.IndexOf('\r') >= 0 || content.IndexOf('\n') >= 0)
+ {
+ error = "Text content contains line break characters.";
+ return false;
+ }
+
+ // 检验首尾空白
+ if (content != content.Trim())
+ {
+ error = "Text content contains leading or trailing whitespace.";
+ return false;
+ }
+
+ error = null;
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs.meta b/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs.meta
new file mode 100644
index 00000000..4e9fc7e0
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Utility/Utilities/TextUtility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cb9c3387de33cfc44a1bec18b00e4a62
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs
index ccf4c830..9e824380 100644
--- a/Assets/YooAsset/Runtime/YooAssets.cs
+++ b/Assets/YooAsset/Runtime/YooAssets.cs
@@ -122,7 +122,7 @@ namespace YooAsset
CheckInitialized(packageName);
var package = GetPackageInternal(packageName);
if (package == null)
- YooLogger.Error($"Can not found resource package : {packageName}");
+ YooLogger.Error($"Cannot find resource package: {packageName}");
return package;
}
@@ -154,7 +154,7 @@ namespace YooAsset
ResourcePackage package = GetPackageInternal(packageName);
if (package == null)
{
- YooLogger.Error($"Can not found resource package : {packageName}");
+ YooLogger.Error($"Cannot find resource package: {packageName}");
return false;
}
diff --git a/Assets/YooAsset/Samples~/Extension Sample/Editor/PreprocessBuild/PreprocessBuildCatalog.cs b/Assets/YooAsset/Samples~/Extension Sample/Editor/PreprocessBuild/PreprocessBuildCatalog.cs
index 52b010c4..5d30cea0 100644
--- a/Assets/YooAsset/Samples~/Extension Sample/Editor/PreprocessBuild/PreprocessBuildCatalog.cs
+++ b/Assets/YooAsset/Samples~/Extension Sample/Editor/PreprocessBuild/PreprocessBuildCatalog.cs
@@ -16,7 +16,7 @@ namespace YooAsset
{
YooLogger.Log("Begin to create catalog file !");
- string rootPath = YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ string rootPath = YooAssetSettingsData.GetYooDefaultBuiltinRoot();
DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
if (rootDirectory.Exists == false)
{
diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/CompatibleOldVersion.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/CompatibleOldVersion.cs
index 1f26f99c..0abc1e56 100644
--- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/CompatibleOldVersion.cs
+++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/CompatibleOldVersion.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
using UnityEngine;
using YooAsset;
@@ -121,9 +121,9 @@ public class DestroyOperation : AsyncOperationBase
public class UpdatePackageManifestOperation : AsyncOperationBase
{
private bool _isDone = false;
- private readonly LoadManifestOperation _operation;
+ private readonly LoadPackageManifestOperation _operation;
- internal UpdatePackageManifestOperation(LoadManifestOperation op)
+ internal UpdatePackageManifestOperation(LoadPackageManifestOperation op)
{
_operation = op;
}
@@ -247,10 +247,10 @@ public static class CompatibleResourcePackage
///
/// 兼容Yoo2版本
///
- public static RequestVersionOperation RequestPackageVersionAsync(this ResourcePackage package, bool appendTimeTicks = true, int timeout = 60)
+ public static RequestPackageVersionOperation RequestPackageVersionAsync(this ResourcePackage package, bool appendTimeTicks = true, int timeout = 60)
{
- var options = new RequestVersionOptions(appendTimeTicks, timeout);
- return package.RequestVersionAsync(options);
+ var options = new RequestPackageVersionOptions(appendTimeTicks, timeout);
+ return package.RequestPackageVersionAsync(options);
}
///
@@ -258,8 +258,8 @@ public static class CompatibleResourcePackage
///
public static UpdatePackageManifestOperation UpdatePackageManifestAsync(this ResourcePackage package, string packageVersion, int timeout = 60)
{
- var options = new LoadManifestOptions(packageVersion, timeout);
- var operation = package.LoadManifestAsync(options);
+ var options = new LoadPackageManifestOptions(packageVersion, timeout);
+ var operation = package.LoadPackageManifestAsync(options);
var wrapper = new UpdatePackageManifestOperation(operation);
AsyncOperationSystem.StartOperation(package.PackageName, wrapper);
return wrapper;
@@ -268,10 +268,10 @@ public static class CompatibleResourcePackage
///
/// 兼容Yoo2版本
///
- public static PreDownloaderOperation PreDownloadContentAsync(this ResourcePackage package, string packageVersion, int timeout = 60)
+ public static PrefetchManifestOperation PreDownloadContentAsync(this ResourcePackage package, string packageVersion, int timeout = 60)
{
- var options = new PreDownloaderOptions(packageVersion, timeout);
- return package.PreDownloaderAsync(options);
+ var options = new PrefetchManifestOptions(packageVersion, timeout);
+ return package.PrefetchManifestAsync(options);
}
///
diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/CopyBuildinManifestOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/CopyBuildinManifestOperation.cs
index 813a87ba..fd604ce6 100644
--- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/CopyBuildinManifestOperation.cs
+++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/CopyBuildinManifestOperation.cs
@@ -22,8 +22,8 @@ public class CopyBuildinManifestOperation : AsyncOperationBase
private readonly string _packageName;
private readonly string _packageVersion;
private readonly IDownloadBackend _backend;
- private IDownloadFileRequest _hashFileRequestOp;
- private IDownloadFileRequest _manifestFileRequestOp;
+ private IDownloadFileRequest _hashFileRequest;
+ private IDownloadFileRequest _manifestFileRequest;
private ESteps _steps = ESteps.None;
public CopyBuildinManifestOperation(string packageName, string packageVersion)
@@ -55,20 +55,20 @@ public class CopyBuildinManifestOperation : AsyncOperationBase
if (_steps == ESteps.UnpackHashFile)
{
- if(_hashFileRequestOp == null)
+ if(_hashFileRequest == null)
{
string sourcePath = GetBuildinHashFilePath();
string destPath = GetCacheHashFilePath();
string url = DownloadSystemTools.ToLocalUrl(sourcePath);
var args = new DownloadFileRequestArgs(url, destPath, 60, 0);
- _hashFileRequestOp = _backend.CreateFileRequest(args);
- _hashFileRequestOp.SendRequest();
+ _hashFileRequest = _backend.CreateFileRequest(args);
+ _hashFileRequest.SendRequest();
}
- if (_hashFileRequestOp.IsDone == false)
+ if (_hashFileRequest.IsDone == false)
return;
- if (_hashFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_hashFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.CheckManifestFile;
}
@@ -76,7 +76,7 @@ public class CopyBuildinManifestOperation : AsyncOperationBase
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _hashFileRequestOp.Error;
+ Error = _hashFileRequest.Error;
}
}
@@ -95,20 +95,20 @@ public class CopyBuildinManifestOperation : AsyncOperationBase
if (_steps == ESteps.UnpackManifestFile)
{
- if (_manifestFileRequestOp == null)
+ if (_manifestFileRequest == null)
{
string sourcePath = GetBuildinManifestFilePath();
string destPath = GetCacheManifestFilePath();
string url = DownloadSystemTools.ToLocalUrl(sourcePath);
var args = new DownloadFileRequestArgs(url, destPath, 60, 0);
- _manifestFileRequestOp = _backend.CreateFileRequest(args);
- _manifestFileRequestOp.SendRequest();
+ _manifestFileRequest = _backend.CreateFileRequest(args);
+ _manifestFileRequest.SendRequest();
}
- if (_manifestFileRequestOp.IsDone == false)
+ if (_manifestFileRequest.IsDone == false)
return;
- if (_manifestFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_manifestFileRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
@@ -117,14 +117,14 @@ public class CopyBuildinManifestOperation : AsyncOperationBase
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _manifestFileRequestOp.Error;
+ Error = _manifestFileRequest.Error;
}
}
}
private string GetBuildinYooRoot()
{
- return YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ return YooAssetSettingsData.GetYooDefaultBuiltinRoot();
}
private string GetBuildinHashFilePath()
{
diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetBuildinPackageVersionOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetBuildinPackageVersionOperation.cs
index 56b62fb2..fd253394 100644
--- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetBuildinPackageVersionOperation.cs
+++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetBuildinPackageVersionOperation.cs
@@ -18,7 +18,7 @@ public class GetBuildinPackageVersionOperation : AsyncOperationBase
private readonly string _packageName;
private readonly IDownloadBackend _backend;
- private IDownloadTextRequest _versionFileRequestOp;
+ private IDownloadTextRequest _downloadTextRequest;
private ESteps _steps = ESteps.None;
///
@@ -42,36 +42,36 @@ public class GetBuildinPackageVersionOperation : AsyncOperationBase
if (_steps == ESteps.GetPackageVersion)
{
- if (_versionFileRequestOp == null)
+ if (_downloadTextRequest == null)
{
string filePath = GetBuildinPackageVersionFilePath();
string url = DownloadSystemTools.ToLocalUrl(filePath);
var args = new DownloadDataRequestArgs(url, 60, 0);
- _versionFileRequestOp = _backend.CreateTextRequest(args);
- _versionFileRequestOp.SendRequest();
+ _downloadTextRequest = _backend.CreateTextRequest(args);
+ _downloadTextRequest.SendRequest();
}
- if (_versionFileRequestOp.IsDone == false)
+ if (_downloadTextRequest.IsDone == false)
return;
- if (_versionFileRequestOp.Status == EDownloadRequestStatus.Succeeded)
+ if (_downloadTextRequest.Status == EDownloadRequestStatus.Succeeded)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeeded;
- PackageVersion = _versionFileRequestOp.Result;
+ PackageVersion = _downloadTextRequest.Result;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _versionFileRequestOp.Error;
+ Error = _downloadTextRequest.Error;
}
}
}
private string GetBuildinYooRoot()
{
- return YooAssetSettingsData.GetYooDefaultBuildinRoot();
+ return YooAssetSettingsData.GetYooDefaultBuiltinRoot();
}
private string GetBuildinPackageVersionFilePath()
{
diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetCacheBundleSizeOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetCacheBundleSizeOperation.cs
index a835604c..3324167b 100644
--- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetCacheBundleSizeOperation.cs
+++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionOperation/GetCacheBundleSizeOperation.cs
@@ -62,6 +62,6 @@ public class GetCacheBundleSizeOperation : AsyncOperationBase
{
string rootDirectory = YooAssetSettingsData.GetYooDefaultCacheRoot();
string packageRoot = PathUtility.Combine(rootDirectory, _packageName);
- return PathUtility.Combine(packageRoot, SandboxFileSystemDefine.BundleFilesFolderName);
+ return PathUtility.Combine(packageRoot, SandboxFileSystemConsts.BundleFilesFolderName);
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs
index 78c9495f..7e7fe6e7 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs
@@ -67,7 +67,7 @@ internal class GPFSLoadAssetBundleOperation : FSLoadBundleOperation
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
- Result = new AssetBundleResult(_fileSystem, _bundle, _bundleRequest.AssetBundle, null);
+ Result = new AssetBundleHandle(_fileSystem, _bundle, _bundleRequest.AssetBundle, null);
}
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/MiniGameTest/FileSystemTester.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/MiniGameTest/FileSystemTester.cs
index a80db1d9..451e3689 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/MiniGameTest/FileSystemTester.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/MiniGameTest/FileSystemTester.cs
@@ -1,4 +1,4 @@
-using System.Collections;
+using System.Collections;
using UnityEngine;
namespace YooAsset
@@ -22,8 +22,8 @@ namespace YooAsset
// 请求资源版本
Debug.Log("请求资源版本信息!");
- var requestPackageVersionOptions = new RequestVersionOptions(true, 60);
- var requestPackageVersionOp = fileSystem.RequestVersionAsync(requestPackageVersionOptions);
+ var requestPackageVersionOptions = new FSRequestPackageVersionOptions(true, 60);
+ var requestPackageVersionOp = fileSystem.RequestPackageVersionAsync(requestPackageVersionOptions);
AsyncOperationSystem.StartOperation(packageName, requestPackageVersionOp);
yield return requestPackageVersionOp;
if (requestPackageVersionOp.Status != EOperationStatus.Succeeded)
@@ -35,8 +35,8 @@ namespace YooAsset
// 请求资源清单
string packageVersion = requestPackageVersionOp.PackageVersion;
Debug.Log($"加载资源清单文件!{packageVersion}");
- var loadPackageManifestOptions = new LoadManifestOptions(packageVersion, 60);
- var loadPackageManifestOp = fileSystem.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new FSLoadPackageManifestOptions(packageVersion, 60);
+ var loadPackageManifestOp = fileSystem.LoadPackageManifestAsync(loadPackageManifestOptions);
AsyncOperationSystem.StartOperation(packageName, loadPackageManifestOp);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
@@ -70,8 +70,8 @@ namespace YooAsset
{
var manifest = loadPackageManifestOp.Manifest;
var packageBundle = GetPackageBundle(manifest, testLocation);
- var loadBundleFileOptions = new FCLoadBundleOptions(packageBundle);
- var loadBundleFileOp = fileSystem.LoadBundleAsync(loadBundleFileOptions);
+ var loadBundleFileOptions = new FSLoadPackageBundleOptions(packageBundle);
+ var loadBundleFileOp = fileSystem.LoadPackageBundleAsync(loadBundleFileOptions);
AsyncOperationSystem.StartOperation(packageName, loadBundleFileOp);
yield return loadBundleFileOp;
if (loadBundleFileOp.Status != EOperationStatus.Succeeded)
@@ -85,7 +85,7 @@ namespace YooAsset
}
// 卸载资源包
- loadBundleFileOp.Result.UnloadBundleFile();
+ loadBundleFileOp.BundleHandle.UnloadBundleFile();
}
Debug.Log("完整测试成功!");
diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs
index 57350d33..ce6affe8 100644
--- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs
+++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs
@@ -44,9 +44,9 @@ internal class FsmInitializePackage : IStateNode
var packageRoot = buildResult.PackageRootDirectory;
var createParameters = new EditorSimulateModeParameters();
createParameters.EditorFileSystemParameters = FileSystemParameters.CreateDefaultEditorFileSystemParameters(packageRoot);
- createParameters.EditorFileSystemParameters.AddParameter(FileSystemParametersDefine.VIRTUAL_WEBGL_MODE, true);
- createParameters.EditorFileSystemParameters.AddParameter(FileSystemParametersDefine.VIRTUAL_DOWNLOAD_MODE, true);
- createParameters.EditorFileSystemParameters.AddParameter(FileSystemParametersDefine.VIRTUAL_DOWNLOAD_SPEED, 1024 * 1000);
+ createParameters.EditorFileSystemParameters.AddParameter(FileSystemConsts.VIRTUAL_WEBGL_MODE, true);
+ createParameters.EditorFileSystemParameters.AddParameter(FileSystemConsts.VIRTUAL_DOWNLOAD_MODE, true);
+ createParameters.EditorFileSystemParameters.AddParameter(FileSystemConsts.VIRTUAL_DOWNLOAD_SPEED, 1024 * 1000);
initializationOperation = package.InitializeAsync(createParameters);
}
@@ -54,7 +54,7 @@ internal class FsmInitializePackage : IStateNode
if (playMode == EPlayMode.OfflinePlayMode)
{
var createParameters = new OfflinePlayModeParameters();
- createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters();
+ createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuiltinFileSystemParameters();
initializationOperation = package.InitializeAsync(createParameters);
}
@@ -65,12 +65,12 @@ internal class FsmInitializePackage : IStateNode
string fallbackHostServer = GetHostServerURL();
IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
var createParameters = new HostPlayModeParameters();
- createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters();
- createParameters.BuildinFileSystemParameters.AddParameter(FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST, true);
- createParameters.CacheFileSystemParameters = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
- createParameters.CacheFileSystemParameters.AddParameter(FileSystemParametersDefine.DOWNLOAD_MAX_CONCURRENCY, 5);
- createParameters.CacheFileSystemParameters.AddParameter(FileSystemParametersDefine.DOWNLOAD_MAX_REQUEST_PER_FRAME, 1);
- createParameters.CacheFileSystemParameters.AddParameter(FileSystemParametersDefine.DOWNLOAD_WATCH_DOG_TIME, 10);
+ createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuiltinFileSystemParameters();
+ createParameters.BuildinFileSystemParameters.AddParameter(FileSystemConsts.COPY_BUILTIN_PACKAGE_MANIFEST, true);
+ createParameters.CacheFileSystemParameters = FileSystemParameters.CreateDefaultSandboxFileSystemParameters(remoteServices);
+ createParameters.CacheFileSystemParameters.AddParameter(FileSystemConsts.DOWNLOAD_MAX_CONCURRENCY, 5);
+ createParameters.CacheFileSystemParameters.AddParameter(FileSystemConsts.DOWNLOAD_MAX_REQUEST_PER_FRAME, 1);
+ createParameters.CacheFileSystemParameters.AddParameter(FileSystemConsts.DOWNLOAD_WATCHDOG_TIMEOUT, 10);
initializationOperation = package.InitializeAsync(createParameters);
}
@@ -149,13 +149,12 @@ internal class FsmInitializePackage : IStateNode
_defaultHostServer = defaultHostServer;
_fallbackHostServer = fallbackHostServer;
}
- string IRemoteServices.GetRemoteMainURL(string fileName)
+ public IReadOnlyList GetRemoteURLs(string fileName)
{
- return $"{_defaultHostServer}/{fileName}";
- }
- string IRemoteServices.GetRemoteFallbackURL(string fileName)
- {
- return $"{_fallbackHostServer}/{fileName}";
+ List result = new List();
+ result.Add($"{_defaultHostServer}/{fileName}");
+ result.Add($"{_fallbackHostServer}/{fileName}");
+ return result;
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmRequestPackageVersion.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmRequestPackageVersion.cs
index af5e42d7..633aa4f8 100644
--- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmRequestPackageVersion.cs
+++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmRequestPackageVersion.cs
@@ -28,7 +28,7 @@ internal class FsmRequestPackageVersion : IStateNode
{
var packageName = (string)_machine.GetBlackboardValue("PackageName");
var package = YooAssets.GetPackage(packageName);
- var operation = package.RequestVersionAsync();
+ var operation = package.RequestPackageVersionAsync();
yield return operation;
if (operation.Status != EOperationStatus.Succeeded)
diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs
index 18847372..27f7dd2e 100644
--- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs
@@ -68,15 +68,15 @@ public class T1_TestEditorFileSystem : IPrebuildSetup, IPostBuildCleanup
Assert.AreEqual(EOperationStatus.Succeeded, initializeOp.Status);
// 请求资源版本
- var requetVersionOp = package.RequestVersionAsync();
+ var requetVersionOp = package.RequestPackageVersionAsync();
yield return requetVersionOp;
if (requetVersionOp.Status != EOperationStatus.Succeeded)
Debug.LogError(requetVersionOp.Error);
Assert.AreEqual(EOperationStatus.Succeeded, requetVersionOp.Status);
// 更新资源清单
- var loadPackageManifestOptions = new LoadManifestOptions(requetVersionOp.PackageVersion, 60);
- var loadPackageManifestOp = package.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new LoadPackageManifestOptions(requetVersionOp.PackageVersion, 60);
+ var loadPackageManifestOp = package.LoadPackageManifestAsync(loadPackageManifestOptions);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
Debug.LogError(loadPackageManifestOp.Error);
@@ -104,15 +104,15 @@ public class T1_TestEditorFileSystem : IPrebuildSetup, IPostBuildCleanup
Assert.AreEqual(EOperationStatus.Succeeded, initializeOp.Status);
// 请求资源版本
- var requetVersionOp = package.RequestVersionAsync();
+ var requetVersionOp = package.RequestPackageVersionAsync();
yield return requetVersionOp;
if (requetVersionOp.Status != EOperationStatus.Succeeded)
Debug.LogError(requetVersionOp.Error);
Assert.AreEqual(EOperationStatus.Succeeded, requetVersionOp.Status);
// 更新资源清单
- var loadPackageManifestOptions = new LoadManifestOptions(requetVersionOp.PackageVersion, 60);
- var loadPackageManifestOp = package.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new LoadPackageManifestOptions(requetVersionOp.PackageVersion, 60);
+ var loadPackageManifestOp = package.LoadPackageManifestAsync(loadPackageManifestOptions);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
Debug.LogError(loadPackageManifestOp.Error);
diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs
index 89d2c52e..15088f6c 100644
--- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs
@@ -61,8 +61,8 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup
// 初始化资源包
var initParams = new OfflinePlayModeOptions();
var manifestServices = new TestManifestDecryptor();
- initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(packageRoot);
- initParams.BuildinFileSystemParameters.AddParameter(FileSystemParametersDefine.MANIFEST_DECRYPTOR, manifestServices);
+ initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuiltinFileSystemParameters(packageRoot);
+ initParams.BuildinFileSystemParameters.AddParameter(FileSystemConsts.MANIFEST_DECRYPTOR, manifestServices);
var initializeOp = package.InitializePackageAsync(initParams);
yield return initializeOp;
if (initializeOp.Status != EOperationStatus.Succeeded)
@@ -70,15 +70,15 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup
Assert.AreEqual(EOperationStatus.Succeeded, initializeOp.Status);
// 请求资源版本
- var requetVersionOp = package.RequestVersionAsync();
+ var requetVersionOp = package.RequestPackageVersionAsync();
yield return requetVersionOp;
if (requetVersionOp.Status != EOperationStatus.Succeeded)
Debug.LogError(requetVersionOp.Error);
Assert.AreEqual(EOperationStatus.Succeeded, requetVersionOp.Status);
// 更新资源清单
- var loadPackageManifestOptions = new LoadManifestOptions(requetVersionOp.PackageVersion, 60);
- var loadPackageManifestOp = package.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new LoadPackageManifestOptions(requetVersionOp.PackageVersion, 60);
+ var loadPackageManifestOp = package.LoadPackageManifestAsync(loadPackageManifestOptions);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
Debug.LogError(loadPackageManifestOp.Error);
@@ -98,7 +98,7 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup
// 初始化资源包
var initParams = new OfflinePlayModeOptions();
- initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(packageRoot);
+ initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuiltinFileSystemParameters(packageRoot);
var initializeOp = package.InitializePackageAsync(initParams);
yield return initializeOp;
if (initializeOp.Status != EOperationStatus.Succeeded)
@@ -106,15 +106,15 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup
Assert.AreEqual(EOperationStatus.Succeeded, initializeOp.Status);
// 请求资源版本
- var requetVersionOp = package.RequestVersionAsync();
+ var requetVersionOp = package.RequestPackageVersionAsync();
yield return requetVersionOp;
if (requetVersionOp.Status != EOperationStatus.Succeeded)
Debug.LogError(requetVersionOp.Error);
Assert.AreEqual(EOperationStatus.Succeeded, requetVersionOp.Status);
// 更新资源清单
- var loadPackageManifestOptions = new LoadManifestOptions(requetVersionOp.PackageVersion, 60);
- var loadPackageManifestOp = package.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new LoadPackageManifestOptions(requetVersionOp.PackageVersion, 60);
+ var loadPackageManifestOp = package.LoadPackageManifestAsync(loadPackageManifestOptions);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
Debug.LogError(loadPackageManifestOp.Error);
diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs
index c5848f4c..50523fdf 100644
--- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs
@@ -8,6 +8,7 @@ using UnityEngine.U2D;
using UnityEngine.TestTools;
using NUnit.Framework;
using YooAsset;
+using System.Collections.Generic;
public class T3_TestCacheFileSystem : IPrebuildSetup, IPostBuildCleanup
{
@@ -50,8 +51,8 @@ public class T3_TestCacheFileSystem : IPrebuildSetup, IPostBuildCleanup
string hostServerIP = "http://127.0.0.1/CDN/Android/Test/";
var remoteServices = new TestRemoteServices(hostServerIP);
initParams.BuildinFileSystemParameters = null;
- initParams.CacheFileSystemParameters = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
- initParams.CacheFileSystemParameters.AddParameter(FileSystemParametersDefine.MANIFEST_DECRYPTOR, manifestServices);
+ initParams.CacheFileSystemParameters = FileSystemParameters.CreateDefaultSandboxFileSystemParameters(remoteServices);
+ initParams.CacheFileSystemParameters.AddParameter(FileSystemConsts.MANIFEST_DECRYPTOR, manifestServices);
var initializeOp = package.InitializePackageAsync(initParams);
yield return initializeOp;
if (initializeOp.Status != EOperationStatus.Succeeded)
@@ -59,15 +60,15 @@ public class T3_TestCacheFileSystem : IPrebuildSetup, IPostBuildCleanup
Assert.AreEqual(EOperationStatus.Succeeded, initializeOp.Status);
// 请求资源版本
- var requetVersionOp = package.RequestVersionAsync();
+ var requetVersionOp = package.RequestPackageVersionAsync();
yield return requetVersionOp;
if (requetVersionOp.Status != EOperationStatus.Succeeded)
Debug.LogError(requetVersionOp.Error);
Assert.AreEqual(EOperationStatus.Succeeded, requetVersionOp.Status);
// 更新资源清单
- var loadPackageManifestOptions = new LoadManifestOptions(requetVersionOp.PackageVersion, 60);
- var loadPackageManifestOp = package.LoadManifestAsync(loadPackageManifestOptions);
+ var loadPackageManifestOptions = new LoadPackageManifestOptions(requetVersionOp.PackageVersion, 60);
+ var loadPackageManifestOp = package.LoadPackageManifestAsync(loadPackageManifestOptions);
yield return loadPackageManifestOp;
if (loadPackageManifestOp.Status != EOperationStatus.Succeeded)
Debug.LogError(loadPackageManifestOp.Error);
@@ -82,13 +83,12 @@ public class T3_TestCacheFileSystem : IPrebuildSetup, IPostBuildCleanup
{
_localServerRoot = localServerRoot;
}
- string IRemoteServices.GetRemoteMainURL(string fileName)
+
+ public IReadOnlyList GetRemoteURLs(string fileName)
{
- return $"{_localServerRoot}/{fileName}";
- }
- string IRemoteServices.GetRemoteFallbackURL(string fileName)
- {
- return $"{_localServerRoot}/{fileName}";
+ List urls = new List();
+ urls.Add($"{_localServerRoot}/{fileName}");
+ return urls;
}
}