diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSLoadPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSLoadPackageManifestOperation.cs
index 03b2af3f..b39610fa 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSLoadPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSLoadPackageManifestOperation.cs
@@ -14,8 +14,8 @@ namespace YooAsset
private readonly DefaultWebRemoteFileSystem _fileSystem;
private readonly string _packageVersion;
private readonly int _timeout;
- private RequestWebRemotePackageHashOperation _requestWebPackageHashOp;
- private LoadWebRemotePackageManifestOperation _loadWebPackageManifestOp;
+ private RequestWebPackageHashOperation _requestWebPackageHashOp;
+ private LoadWebPackageManifestOperation _loadWebPackageManifestOp;
private ESteps _steps = ESteps.None;
@@ -38,7 +38,7 @@ namespace YooAsset
{
if (_requestWebPackageHashOp == null)
{
- _requestWebPackageHashOp = new RequestWebRemotePackageHashOperation(_fileSystem, _packageVersion, _timeout);
+ _requestWebPackageHashOp = new RequestWebPackageHashOperation(_fileSystem.RemoteServices, _fileSystem.PackageName, _packageVersion, _timeout);
_requestWebPackageHashOp.StartOperation();
AddChildOperation(_requestWebPackageHashOp);
}
@@ -64,7 +64,10 @@ namespace YooAsset
if (_loadWebPackageManifestOp == null)
{
string packageHash = _requestWebPackageHashOp.PackageHash;
- _loadWebPackageManifestOp = new LoadWebRemotePackageManifestOperation(_fileSystem, _packageVersion, packageHash, _timeout);
+ string packageName = _fileSystem.PackageName;
+ var manifestServices = _fileSystem.ManifestServices;
+ var remoteServices = _fileSystem.RemoteServices;
+ _loadWebPackageManifestOp = new LoadWebPackageManifestOperation(manifestServices, remoteServices, packageName, _packageVersion, packageHash, _timeout);
_loadWebPackageManifestOp.StartOperation();
AddChildOperation(_loadWebPackageManifestOp);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSRequestPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSRequestPackageVersionOperation.cs
index 77aa5187..6d3d817e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSRequestPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/DWRFSRequestPackageVersionOperation.cs
@@ -13,7 +13,7 @@ namespace YooAsset
private readonly DefaultWebRemoteFileSystem _fileSystem;
private readonly bool _appendTimeTicks;
private readonly int _timeout;
- private RequestWebRemotePackageVersionOperation _requestWebPackageVersionOp;
+ private RequestWebPackageVersionOperation _requestWebPackageVersionOp;
private ESteps _steps = ESteps.None;
@@ -36,7 +36,7 @@ namespace YooAsset
{
if (_requestWebPackageVersionOp == null)
{
- _requestWebPackageVersionOp = new RequestWebRemotePackageVersionOperation(_fileSystem, _appendTimeTicks, _timeout);
+ _requestWebPackageVersionOp = new RequestWebPackageVersionOperation(_fileSystem.RemoteServices, _fileSystem.PackageName, _appendTimeTicks, _timeout);
_requestWebPackageVersionOp.StartOperation();
AddChildOperation(_requestWebPackageVersionOp);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs
deleted file mode 100644
index 556f5e67..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-
-namespace YooAsset
-{
- internal class LoadWebRemotePackageManifestOperation : AsyncOperationBase
- {
- private enum ESteps
- {
- None,
- RequestFileData,
- VerifyFileData,
- LoadManifest,
- Done,
- }
-
- private readonly DefaultWebRemoteFileSystem _fileSystem;
- private readonly string _packageVersion;
- private readonly string _packageHash;
- private readonly int _timeout;
- private UnityWebDataRequestOperation _webDataRequestOp;
- private DeserializeManifestOperation _deserializer;
- private int _requestCount = 0;
- private ESteps _steps = ESteps.None;
-
- ///
- /// 包裹清单
- ///
- public PackageManifest Manifest { private set; get; }
-
-
- internal LoadWebRemotePackageManifestOperation(DefaultWebRemoteFileSystem fileSystem, string packageVersion, string packageHash, int timeout)
- {
- _fileSystem = fileSystem;
- _packageVersion = packageVersion;
- _packageHash = packageHash;
- _timeout = timeout;
- }
- internal override void InternalStart()
- {
- _requestCount = WebRequestCounter.GetRequestFailedCount(_fileSystem.PackageName, nameof(LoadWebRemotePackageManifestOperation));
- _steps = ESteps.RequestFileData;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.RequestFileData)
- {
- if (_webDataRequestOp == null)
- {
- string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_fileSystem.PackageName, _packageVersion);
- string url = GetWebRequestURL(fileName);
- _webDataRequestOp = new UnityWebDataRequestOperation(url, _timeout);
- _webDataRequestOp.StartOperation();
- AddChildOperation(_webDataRequestOp);
- }
-
- _webDataRequestOp.UpdateOperation();
- if (_webDataRequestOp.IsDone == false)
- return;
-
- if (_webDataRequestOp.Status == EOperationStatus.Succeed)
- {
- _steps = ESteps.VerifyFileData;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _webDataRequestOp.Error;
- WebRequestCounter.RecordRequestFailed(_fileSystem.PackageName, nameof(LoadWebRemotePackageManifestOperation));
- }
- }
-
- if (_steps == ESteps.VerifyFileData)
- {
- if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
- {
- _steps = ESteps.LoadManifest;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = "Failed to verify web remote package manifest file!";
- }
- }
-
- if (_steps == ESteps.LoadManifest)
- {
- if (_deserializer == null)
- {
- _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _webDataRequestOp.Result);
- _deserializer.StartOperation();
- AddChildOperation(_deserializer);
- }
-
- _deserializer.UpdateOperation();
- Progress = _deserializer.Progress;
- if (_deserializer.IsDone == false)
- return;
-
- if (_deserializer.Status == EOperationStatus.Succeed)
- {
- _steps = ESteps.Done;
- Manifest = _deserializer.Manifest;
- Status = EOperationStatus.Succeed;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _deserializer.Error;
- }
- }
- }
- internal override string InternalGetDesc()
- {
- return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
- }
-
- private string GetWebRequestURL(string fileName)
- {
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs
deleted file mode 100644
index bf98767d..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-
-namespace YooAsset
-{
- internal class RequestWebRemotePackageHashOperation : AsyncOperationBase
- {
- private enum ESteps
- {
- None,
- RequestPackageHash,
- Done,
- }
-
- private readonly DefaultWebRemoteFileSystem _fileSystem;
- private readonly string _packageVersion;
- private readonly int _timeout;
- private UnityWebTextRequestOperation _webTextRequestOp;
- private int _requestCount = 0;
- private ESteps _steps = ESteps.None;
-
- ///
- /// 包裹哈希值
- ///
- public string PackageHash { private set; get; }
-
-
- public RequestWebRemotePackageHashOperation(DefaultWebRemoteFileSystem fileSystem, string packageVersion, int timeout)
- {
- _fileSystem = fileSystem;
- _packageVersion = packageVersion;
- _timeout = timeout;
- }
- internal override void InternalStart()
- {
- _requestCount = WebRequestCounter.GetRequestFailedCount(_fileSystem.PackageName, nameof(RequestWebRemotePackageHashOperation));
- _steps = ESteps.RequestPackageHash;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.RequestPackageHash)
- {
- if (_webTextRequestOp == null)
- {
- string fileName = YooAssetSettingsData.GetPackageHashFileName(_fileSystem.PackageName, _packageVersion);
- string url = GetWebRequestURL(fileName);
- _webTextRequestOp = new UnityWebTextRequestOperation(url, _timeout);
- _webTextRequestOp.StartOperation();
- AddChildOperation(_webTextRequestOp);
- }
-
- _webTextRequestOp.UpdateOperation();
- Progress = _webTextRequestOp.Progress;
- if (_webTextRequestOp.IsDone == false)
- return;
-
- if (_webTextRequestOp.Status == EOperationStatus.Succeed)
- {
- PackageHash = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageHash))
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Web remote package hash file content is empty !";
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
- WebRequestCounter.RecordRequestFailed(_fileSystem.PackageName, nameof(RequestWebRemotePackageHashOperation));
- }
- }
- }
-
- private string GetWebRequestURL(string fileName)
- {
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- return _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- return _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs
deleted file mode 100644
index b65e64f5..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-
-namespace YooAsset
-{
- internal class RequestWebRemotePackageVersionOperation : AsyncOperationBase
- {
- private enum ESteps
- {
- None,
- RequestPackageVersion,
- Done,
- }
-
- private readonly DefaultWebRemoteFileSystem _fileSystem;
- private readonly bool _appendTimeTicks;
- private readonly int _timeout;
- private UnityWebTextRequestOperation _webTextRequestOp;
- private int _requestCount = 0;
- private ESteps _steps = ESteps.None;
-
- ///
- /// 包裹版本
- ///
- public string PackageVersion { private set; get; }
-
-
- internal RequestWebRemotePackageVersionOperation(DefaultWebRemoteFileSystem fileSystem, bool appendTimeTicks, int timeout)
- {
- _fileSystem = fileSystem;
- _appendTimeTicks = appendTimeTicks;
- _timeout = timeout;
- }
- internal override void InternalStart()
- {
- _requestCount = WebRequestCounter.GetRequestFailedCount(_fileSystem.PackageName, nameof(RequestWebRemotePackageVersionOperation));
- _steps = ESteps.RequestPackageVersion;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.RequestPackageVersion)
- {
- if (_webTextRequestOp == null)
- {
- string fileName = YooAssetSettingsData.GetPackageVersionFileName(_fileSystem.PackageName);
- string url = GetWebRequestURL(fileName);
- _webTextRequestOp = new UnityWebTextRequestOperation(url, _timeout);
- _webTextRequestOp.StartOperation();
- AddChildOperation(_webTextRequestOp);
- }
-
- _webTextRequestOp.UpdateOperation();
- Progress = _webTextRequestOp.Progress;
- if (_webTextRequestOp.IsDone == false)
- return;
-
- if (_webTextRequestOp.Status == EOperationStatus.Succeed)
- {
- PackageVersion = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageVersion))
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Web remote package version file content is empty !";
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _webTextRequestOp.Error;
- WebRequestCounter.RecordRequestFailed(_fileSystem.PackageName, nameof(RequestWebRemotePackageVersionOperation));
- }
- }
- }
-
- private string GetWebRequestURL(string fileName)
- {
- string url;
-
- // 轮流返回请求地址
- if (_requestCount % 2 == 0)
- url = _fileSystem.RemoteServices.GetRemoteMainURL(fileName);
- else
- url = _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName);
-
- // 在URL末尾添加时间戳
- if (_appendTimeTicks)
- return $"{url}?{System.DateTime.UtcNow.Ticks}";
- else
- return url;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame.meta
similarity index 77%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame.meta
index c24d382c..c0881227 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9be3163f53935514d9e64e09686db957
+guid: 1ca8ffceab2965e4c8892f62efa86e90
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation.meta
similarity index 77%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation.meta
index 766b9a6a..24ba6337 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 97923f5987c469a4898718033af09e99
+guid: 10a171d1f549765498fc478ac208cfe5
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebAssetBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebAssetBundleOperation.cs
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebAssetBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebAssetBundleOperation.cs
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebAssetBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebAssetBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebAssetBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebAssetBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebEncryptAssetBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebEncryptAssetBundleOperation.cs
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebEncryptAssetBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebEncryptAssetBundleOperation.cs
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebEncryptAssetBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebEncryptAssetBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebEncryptAssetBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebEncryptAssetBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebNormalAssetBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebNormalAssetBundleOperation.cs
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebNormalAssetBundleOperation.cs
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebNormalAssetBundleOperation.cs
diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebNormalAssetBundleOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebNormalAssetBundleOperation.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/FileSystem/Operation/Internal/LoadWebNormalAssetBundleOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebNormalAssetBundleOperation.cs.meta
diff --git a/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs
new file mode 100644
index 00000000..b3de3baf
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs
@@ -0,0 +1,135 @@
+using YooAsset;
+
+internal class LoadWebPackageManifestOperation : AsyncOperationBase
+{
+ private enum ESteps
+ {
+ None,
+ RequestFileData,
+ VerifyFileData,
+ LoadManifest,
+ Done,
+ }
+
+ private readonly IManifestRestoreServices _manifestServices;
+ private readonly IRemoteServices _remoteServices;
+ private readonly string _packageName;
+ private readonly string _packageVersion;
+ private readonly string _packageHash;
+ private readonly int _timeout;
+ private UnityWebDataRequestOperation _webDataRequestOp;
+ private DeserializeManifestOperation _deserializer;
+ private int _requestCount = 0;
+ private ESteps _steps = ESteps.None;
+
+ ///
+ /// 包裹清单
+ ///
+ public PackageManifest Manifest { private set; get; }
+
+
+ internal LoadWebPackageManifestOperation(IManifestRestoreServices manifestServices, IRemoteServices remoteServices,
+ string packageName, string packageVersion, string packageHash, int timeout)
+ {
+ _manifestServices = manifestServices;
+ _remoteServices = remoteServices;
+ _packageName = packageName;
+ _packageVersion = packageVersion;
+ _packageHash = packageHash;
+ _timeout = timeout;
+ }
+ internal override void InternalStart()
+ {
+ _requestCount = WebRequestCounter.GetRequestFailedCount(_packageName, nameof(LoadWebPackageManifestOperation));
+ _steps = ESteps.RequestFileData;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.RequestFileData)
+ {
+ if (_webDataRequestOp == null)
+ {
+ string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_packageName, _packageVersion);
+ string url = GetRequestURL(fileName);
+ _webDataRequestOp = new UnityWebDataRequestOperation(url, _timeout);
+ _webDataRequestOp.StartOperation();
+ AddChildOperation(_webDataRequestOp);
+ }
+
+ _webDataRequestOp.UpdateOperation();
+ Progress = _webDataRequestOp.Progress;
+ if (_webDataRequestOp.IsDone == false)
+ return;
+
+ if (_webDataRequestOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.VerifyFileData;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webDataRequestOp.Error;
+ WebRequestCounter.RecordRequestFailed(_packageName, nameof(LoadWebPackageManifestOperation));
+ }
+ }
+
+ if (_steps == ESteps.VerifyFileData)
+ {
+ if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
+ {
+ _steps = ESteps.LoadManifest;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "Failed to verify web package manifest file!";
+ }
+ }
+
+ if (_steps == ESteps.LoadManifest)
+ {
+ if (_deserializer == null)
+ {
+ _deserializer = new DeserializeManifestOperation(_manifestServices, _webDataRequestOp.Result);
+ _deserializer.StartOperation();
+ AddChildOperation(_deserializer);
+ }
+
+ _deserializer.UpdateOperation();
+ Progress = _deserializer.Progress;
+ if (_deserializer.IsDone == false)
+ return;
+
+ if (_deserializer.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.Done;
+ Manifest = _deserializer.Manifest;
+ Status = EOperationStatus.Succeed;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _deserializer.Error;
+ }
+ }
+ }
+ internal override string InternalGetDesc()
+ {
+ return $"PackageVersion : {_packageVersion} PackageHash : {_packageHash}";
+ }
+
+ private string GetRequestURL(string fileName)
+ {
+ // 轮流返回请求地址
+ if (_requestCount % 2 == 0)
+ return _remoteServices.GetRemoteMainURL(fileName);
+ else
+ return _remoteServices.GetRemoteFallbackURL(fileName);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs.meta
index ecc02a78..a378abc9 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: f2a5bb0106a45e540a43a05b72a75bcd
+guid: eb2ed9a86dbe88c42a3715b90df0e266
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs
new file mode 100644
index 00000000..0e37ac80
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs
@@ -0,0 +1,92 @@
+using YooAsset;
+
+internal class RequestWebPackageHashOperation : AsyncOperationBase
+{
+ private enum ESteps
+ {
+ None,
+ RequestPackageHash,
+ Done,
+ }
+
+ private readonly IRemoteServices _remoteServices;
+ private readonly string _packageName;
+ private readonly string _packageVersion;
+ private readonly int _timeout;
+ private UnityWebTextRequestOperation _webTextRequestOp;
+ private int _requestCount = 0;
+ private ESteps _steps = ESteps.None;
+
+ ///
+ /// 包裹哈希值
+ ///
+ public string PackageHash { private set; get; }
+
+
+ public RequestWebPackageHashOperation(IRemoteServices remoteServices, string packageName, string packageVersion, int timeout)
+ {
+ _remoteServices = remoteServices;
+ _packageName = packageName;
+ _packageVersion = packageVersion;
+ _timeout = timeout;
+ }
+ internal override void InternalStart()
+ {
+ _requestCount = WebRequestCounter.GetRequestFailedCount(_packageName, nameof(RequestWebPackageHashOperation));
+ _steps = ESteps.RequestPackageHash;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.RequestPackageHash)
+ {
+ if (_webTextRequestOp == null)
+ {
+ string fileName = YooAssetSettingsData.GetPackageHashFileName(_packageName, _packageVersion);
+ string url = GetRequestURL(fileName);
+ _webTextRequestOp = new UnityWebTextRequestOperation(url, _timeout);
+ _webTextRequestOp.StartOperation();
+ AddChildOperation(_webTextRequestOp);
+ }
+
+ _webTextRequestOp.UpdateOperation();
+ Progress = _webTextRequestOp.Progress;
+ if (_webTextRequestOp.IsDone == false)
+ return;
+
+ if (_webTextRequestOp.Status == EOperationStatus.Succeed)
+ {
+ PackageHash = _webTextRequestOp.Result;
+ if (string.IsNullOrEmpty(PackageHash))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Web package hash file content is empty !";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webTextRequestOp.Error;
+ WebRequestCounter.RecordRequestFailed(_packageName, nameof(RequestWebPackageHashOperation));
+ }
+ }
+ }
+
+ private string GetRequestURL(string fileName)
+ {
+ // 轮流返回请求地址
+ if (_requestCount % 2 == 0)
+ return _remoteServices.GetRemoteMainURL(fileName);
+ else
+ return _remoteServices.GetRemoteFallbackURL(fileName);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs.meta
index fd09c872..2c5e9071 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 8ac57bde14f2e1a4e9323751a7157ed7
+guid: 9c7603967834be04e9307b6d4eec2666
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs
new file mode 100644
index 00000000..7147e65e
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs
@@ -0,0 +1,100 @@
+using YooAsset;
+
+internal class RequestWebPackageVersionOperation : AsyncOperationBase
+{
+ private enum ESteps
+ {
+ None,
+ RequestPackageVersion,
+ Done,
+ }
+
+ private readonly IRemoteServices _remoteServices;
+ private readonly string _packageName;
+ private readonly bool _appendTimeTicks;
+ private readonly int _timeout;
+ private UnityWebTextRequestOperation _webTextRequestOp;
+ private int _requestCount = 0;
+ private ESteps _steps = ESteps.None;
+
+ ///
+ /// 包裹版本
+ ///
+ public string PackageVersion { private set; get; }
+
+
+ public RequestWebPackageVersionOperation(IRemoteServices remoteServices, string packageName, bool appendTimeTicks, int timeout)
+ {
+ _remoteServices = remoteServices;
+ _packageName = packageName;
+ _appendTimeTicks = appendTimeTicks;
+ _timeout = timeout;
+ }
+ internal override void InternalStart()
+ {
+ _requestCount = WebRequestCounter.GetRequestFailedCount(_packageName, nameof(RequestWebPackageVersionOperation));
+ _steps = ESteps.RequestPackageVersion;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.RequestPackageVersion)
+ {
+ if (_webTextRequestOp == null)
+ {
+ string fileName = YooAssetSettingsData.GetPackageVersionFileName(_packageName);
+ string url = GetRequestURL(fileName);
+ _webTextRequestOp = new UnityWebTextRequestOperation(url, _timeout);
+ _webTextRequestOp.StartOperation();
+ AddChildOperation(_webTextRequestOp);
+ }
+
+ _webTextRequestOp.UpdateOperation();
+ Progress = _webTextRequestOp.Progress;
+ if (_webTextRequestOp.IsDone == false)
+ return;
+
+ if (_webTextRequestOp.Status == EOperationStatus.Succeed)
+ {
+ PackageVersion = _webTextRequestOp.Result;
+ if (string.IsNullOrEmpty(PackageVersion))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Web package version file content is empty !";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webTextRequestOp.Error;
+ WebRequestCounter.RecordRequestFailed(_packageName, nameof(RequestWebPackageVersionOperation));
+ }
+ }
+ }
+
+ private string GetRequestURL(string fileName)
+ {
+ string url;
+
+ // 轮流返回请求地址
+ if (_requestCount % 2 == 0)
+ url = _remoteServices.GetRemoteMainURL(fileName);
+ else
+ url = _remoteServices.GetRemoteFallbackURL(fileName);
+
+ // 在URL末尾添加时间戳
+ if (_appendTimeTicks)
+ return $"{url}?{System.DateTime.UtcNow.Ticks}";
+ else
+ return url;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs.meta
index 717217ff..e6d9ade8 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9a38597f546a46a429b24abd595c76e4
+guid: ae045c2050b3e8a4d91fb0585bdfb2c0
MonoImporter:
externalObjects: {}
serializedVersion: 2