From d392b02bd4768db178d5a70d7dc877604fd87417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Sat, 30 Aug 2025 17:30:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=E9=87=8D=E6=9E=84=E4=BA=86Web?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=B3=BB=E7=BB=9F=E5=85=AC=E5=85=B1=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 方便小游戏共用基础代码。 --- .../DWRFSLoadPackageManifestOperation.cs | 11 +- .../DWRFSRequestPackageVersionOperation.cs | 4 +- .../LoadWebRemotePackageManifestOperation.cs | 131 ----------------- .../RequestWebRemotePackageHashOperation.cs | 92 ------------ ...RequestWebRemotePackageVersionOperation.cs | 100 ------------- .../Operation/internal.meta => WebGame.meta} | 2 +- .../Internal.meta => WebGame/Operation.meta} | 2 +- .../Operation}/LoadWebAssetBundleOperation.cs | 0 .../LoadWebAssetBundleOperation.cs.meta | 0 .../LoadWebEncryptAssetBundleOperation.cs | 0 ...LoadWebEncryptAssetBundleOperation.cs.meta | 0 .../LoadWebNormalAssetBundleOperation.cs | 0 .../LoadWebNormalAssetBundleOperation.cs.meta | 0 .../LoadWebPackageManifestOperation.cs | 135 ++++++++++++++++++ .../LoadWebPackageManifestOperation.cs.meta} | 2 +- .../RequestWebPackageHashOperation.cs | 92 ++++++++++++ .../RequestWebPackageHashOperation.cs.meta} | 2 +- .../RequestWebPackageVersionOperation.cs | 100 +++++++++++++ ...RequestWebPackageVersionOperation.cs.meta} | 2 +- 19 files changed, 341 insertions(+), 334 deletions(-) delete mode 100644 Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs delete mode 100644 Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs delete mode 100644 Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs rename Assets/YooAsset/Runtime/FileSystem/{DefaultWebRemoteFileSystem/Operation/internal.meta => WebGame.meta} (77%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal.meta => WebGame/Operation.meta} (77%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebAssetBundleOperation.cs (100%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebAssetBundleOperation.cs.meta (100%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebEncryptAssetBundleOperation.cs (100%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebEncryptAssetBundleOperation.cs.meta (100%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebNormalAssetBundleOperation.cs (100%) rename Assets/YooAsset/Runtime/FileSystem/{Operation/Internal => WebGame/Operation}/LoadWebNormalAssetBundleOperation.cs.meta (100%) create mode 100644 Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/LoadWebPackageManifestOperation.cs rename Assets/YooAsset/Runtime/FileSystem/{DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageHashOperation.cs.meta => WebGame/Operation/LoadWebPackageManifestOperation.cs.meta} (83%) create mode 100644 Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageHashOperation.cs rename Assets/YooAsset/Runtime/FileSystem/{DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs.meta => WebGame/Operation/RequestWebPackageHashOperation.cs.meta} (83%) create mode 100644 Assets/YooAsset/Runtime/FileSystem/WebGame/Operation/RequestWebPackageVersionOperation.cs rename Assets/YooAsset/Runtime/FileSystem/{DefaultWebRemoteFileSystem/Operation/internal/RequestWebRemotePackageVersionOperation.cs.meta => WebGame/Operation/RequestWebPackageVersionOperation.cs.meta} (83%) 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