diff --git a/Assets/YooAsset/Runtime/DownloadSystem/DownloadSystemHelper.cs b/Assets/YooAsset/Runtime/DownloadSystem/DownloadSystemHelper.cs
index 602ab9de..dcc50e99 100644
--- a/Assets/YooAsset/Runtime/DownloadSystem/DownloadSystemHelper.cs
+++ b/Assets/YooAsset/Runtime/DownloadSystem/DownloadSystemHelper.cs
@@ -37,6 +37,10 @@ namespace YooAsset
string url;
// 获取对应平台的URL地址
+ // 说明:苹果不同设备上操作系统不同。
+ // 说明:iPhone和iPod对应的是iOS系统。
+ // 说明:iPad对应的是iPadOS系统。
+ // 说明:AppleTV对应的是tvOS系统。
#if UNITY_EDITOR_OSX
url = StringUtility.Format("file://{0}", path);
#elif UNITY_EDITOR
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
index c6eebf61..657b7b6d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
@@ -8,14 +8,18 @@ namespace YooAsset
private enum ESteps
{
None,
- CopyBuildinManifest,
+ LoadBuildinPackageVersion,
+ CopyBuildinPackageHash,
+ CopyBuildinPackageManifest,
InitUnpackFileSystem,
LoadCatalogFile,
Done,
}
private readonly DefaultBuildinFileSystem _fileSystem;
- private CopyBuildinPackageManifestOperation _copyBuildinPackageManifestOp;
+ private RequestBuildinPackageVersionOperation _requestBuildinPackageVersionOp;
+ private CopyBuildinFileOperation _copyBuildinHashFileOp;
+ private CopyBuildinFileOperation _copyBuildinManifestFileOp;
private FSInitializeFileSystemOperation _initUnpackFIleSystemOp;
private LoadBuildinCatalogFileOperation _loadBuildinCatalogFileOp;
private ESteps _steps = ESteps.None;
@@ -32,7 +36,7 @@ namespace YooAsset
Error = $"{nameof(DefaultBuildinFileSystem)} is not support WEBGL platform !";
#else
if (_fileSystem.CopyBuildinPackageManifest)
- _steps = ESteps.CopyBuildinManifest;
+ _steps = ESteps.LoadBuildinPackageVersion;
else
_steps = ESteps.InitUnpackFileSystem;
#endif
@@ -42,20 +46,76 @@ namespace YooAsset
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.CopyBuildinManifest)
+ if (_steps == ESteps.LoadBuildinPackageVersion)
{
- if (_copyBuildinPackageManifestOp == null)
+ if (_requestBuildinPackageVersionOp == null)
{
- _copyBuildinPackageManifestOp = new CopyBuildinPackageManifestOperation(_fileSystem);
- _copyBuildinPackageManifestOp.StartOperation();
- AddChildOperation(_copyBuildinPackageManifestOp);
+ _requestBuildinPackageVersionOp = new RequestBuildinPackageVersionOperation(_fileSystem);
+ _requestBuildinPackageVersionOp.StartOperation();
+ AddChildOperation(_requestBuildinPackageVersionOp);
}
- _copyBuildinPackageManifestOp.UpdateOperation();
- if (_copyBuildinPackageManifestOp.IsDone == false)
+ _requestBuildinPackageVersionOp.UpdateOperation();
+ if (_requestBuildinPackageVersionOp.IsDone == false)
return;
- if (_copyBuildinPackageManifestOp.Status == EOperationStatus.Succeed)
+ if (_requestBuildinPackageVersionOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.CopyBuildinPackageHash;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _requestBuildinPackageVersionOp.Error;
+ }
+ }
+
+ if (_steps == ESteps.CopyBuildinPackageHash)
+ {
+ if (_copyBuildinHashFileOp == null)
+ {
+ string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
+ string destFilePath = GetCopyPackageHashDestPath(packageVersion);
+ string sourceFilePath = _fileSystem.GetBuildinPackageHashFilePath(packageVersion);
+ _copyBuildinHashFileOp = new CopyBuildinFileOperation(sourceFilePath, destFilePath);
+ _copyBuildinHashFileOp.StartOperation();
+ AddChildOperation(_copyBuildinHashFileOp);
+ }
+
+ _copyBuildinHashFileOp.UpdateOperation();
+ if (_copyBuildinHashFileOp.IsDone == false)
+ return;
+
+ if (_copyBuildinHashFileOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.CopyBuildinPackageManifest;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _copyBuildinHashFileOp.Error;
+ }
+ }
+
+ if (_steps == ESteps.CopyBuildinPackageManifest)
+ {
+ if (_copyBuildinManifestFileOp == null)
+ {
+ string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
+ string destFilePath = GetCopyPackageManifestDestPath(packageVersion);
+ string sourceFilePath = _fileSystem.GetBuildinPackageManifestFilePath(packageVersion);
+ _copyBuildinManifestFileOp = new CopyBuildinFileOperation(sourceFilePath, destFilePath);
+ _copyBuildinManifestFileOp.StartOperation();
+ AddChildOperation(_copyBuildinManifestFileOp);
+ }
+
+ _copyBuildinManifestFileOp.UpdateOperation();
+ if (_copyBuildinManifestFileOp.IsDone == false)
+ return;
+
+ if (_copyBuildinManifestFileOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.InitUnpackFileSystem;
}
@@ -63,7 +123,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = _copyBuildinPackageManifestOp.Error;
+ Error = _copyBuildinManifestFileOp.Error;
}
}
@@ -116,6 +176,30 @@ namespace YooAsset
if (_loadBuildinCatalogFileOp.Status == EOperationStatus.Succeed)
{
+ var catalog = _loadBuildinCatalogFileOp.Catalog;
+ if (catalog == null)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "Fatal error : catalog is null !";
+ return;
+ }
+
+ if (catalog.PackageName != _fileSystem.PackageName)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
+ return;
+ }
+
+ foreach (var wrapper in catalog.Wrappers)
+ {
+ var fileWrapper = new DefaultBuildinFileSystem.FileWrapper(wrapper.FileName);
+ _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
+ }
+
+ YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
@@ -127,5 +211,28 @@ namespace YooAsset
}
}
}
+
+ private string GetCopyManifestFileRoot()
+ {
+ string destRoot = _fileSystem.CopyBuildinPackageManifestDestRoot;
+ if (string.IsNullOrEmpty(destRoot))
+ {
+ string defaultCacheRoot = YooAssetSettingsData.GetYooDefaultCacheRoot();
+ destRoot = PathUtility.Combine(defaultCacheRoot, _fileSystem.PackageName, DefaultCacheFileSystemDefine.ManifestFilesFolderName);
+ }
+ return destRoot;
+ }
+ private string GetCopyPackageHashDestPath(string packageVersion)
+ {
+ string fileRoot = GetCopyManifestFileRoot();
+ string fileName = YooAssetSettingsData.GetPackageHashFileName(_fileSystem.PackageName, packageVersion);
+ return PathUtility.Combine(fileRoot, fileName);
+ }
+ private string GetCopyPackageManifestDestPath(string packageVersion)
+ {
+ string fileRoot = GetCopyManifestFileRoot();
+ string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_fileSystem.PackageName, packageVersion);
+ return PathUtility.Combine(fileRoot, fileName);
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs
new file mode 100644
index 00000000..462aec69
--- /dev/null
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs
@@ -0,0 +1,102 @@
+using System;
+using System.IO;
+
+namespace YooAsset
+{
+ internal class CopyBuildinFileOperation : AsyncOperationBase
+ {
+ private enum ESteps
+ {
+ None,
+ CheckFileExist,
+ TryCopyFile,
+ UnpackFile,
+ Done,
+ }
+
+ private UnityWebFileRequestOperation _webFileRequestOp;
+ private readonly string _sourceFilePath;
+ private readonly string _destFilePath;
+ private ESteps _steps = ESteps.None;
+
+ public CopyBuildinFileOperation(string sourceFilePath, string destFilePath)
+ {
+ _sourceFilePath = sourceFilePath;
+ _destFilePath = destFilePath;
+ }
+ internal override void InternalStart()
+ {
+ _steps = ESteps.CheckFileExist;
+ }
+ internal override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.CheckFileExist)
+ {
+ if (File.Exists(_destFilePath))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ else
+ {
+ _steps = ESteps.TryCopyFile;
+ }
+ }
+
+ if (_steps == ESteps.TryCopyFile)
+ {
+ if (File.Exists(_sourceFilePath))
+ {
+ try
+ {
+ var directory = Path.GetDirectoryName(_destFilePath);
+ if (Directory.Exists(directory) == false)
+ Directory.CreateDirectory(directory);
+ File.Copy(_sourceFilePath, _destFilePath, true);
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ catch (Exception ex)
+ {
+ YooLogger.Warning($"Failed copy buildin file : {ex.Message}");
+ _steps = ESteps.UnpackFile;
+ }
+ }
+ else
+ {
+ _steps = ESteps.UnpackFile;
+ }
+ }
+
+ if (_steps == ESteps.UnpackFile)
+ {
+ if (_webFileRequestOp == null)
+ {
+ string url = DownloadSystemHelper.ConvertToWWWPath(_sourceFilePath);
+ _webFileRequestOp = new UnityWebFileRequestOperation(url, _destFilePath, 60);
+ _webFileRequestOp.StartOperation();
+ AddChildOperation(_webFileRequestOp);
+ }
+
+ _webFileRequestOp.UpdateOperation();
+ if (_webFileRequestOp.IsDone == false)
+ return;
+
+ if (_webFileRequestOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webFileRequestOp.Error;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs.meta b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs.meta
rename to Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs.meta
index 6950bcb0..2630899a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs.meta
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinFileOperation.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 69f62f6b4185d06498f96aa272e9b926
+guid: bf44368bc5c2bf1479c36d82e931c295
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs
deleted file mode 100644
index 1740db55..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-
-namespace YooAsset
-{
- internal class CopyBuildinPackageManifestOperation : AsyncOperationBase
- {
- private enum ESteps
- {
- None,
- RequestPackageVersion,
- CheckHashFile,
- UnpackHashFile,
- CheckManifestFile,
- UnpackManifestFile,
- Done,
- }
-
- private readonly DefaultBuildinFileSystem _fileSystem;
- private RequestBuildinPackageVersionOperation _requestBuildinPackageVersionOp;
- private UnityWebFileRequestOperation _hashWebFileRequestOp;
- private UnityWebFileRequestOperation _manifestWebFileRequestOp;
- private string _buildinPackageVersion;
- private ESteps _steps = ESteps.None;
-
- public CopyBuildinPackageManifestOperation(DefaultBuildinFileSystem fileSystem)
- {
- _fileSystem = fileSystem;
- }
- internal override void InternalStart()
- {
- _steps = ESteps.RequestPackageVersion;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.RequestPackageVersion)
- {
- if (_requestBuildinPackageVersionOp == null)
- {
- _requestBuildinPackageVersionOp = new RequestBuildinPackageVersionOperation(_fileSystem);
- _requestBuildinPackageVersionOp.StartOperation();
- AddChildOperation(_requestBuildinPackageVersionOp);
- }
-
- _requestBuildinPackageVersionOp.UpdateOperation();
- if (_requestBuildinPackageVersionOp.IsDone == false)
- return;
-
- if (_requestBuildinPackageVersionOp.Status == EOperationStatus.Succeed)
- {
- _steps = ESteps.CheckHashFile;
- _buildinPackageVersion = _requestBuildinPackageVersionOp.PackageVersion;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _requestBuildinPackageVersionOp.Error;
- }
- }
-
- if (_steps == ESteps.CheckHashFile)
- {
- string hashFilePath = GetCopyPackageHashDestPath(_buildinPackageVersion);
- if (File.Exists(hashFilePath))
- {
- _steps = ESteps.CheckManifestFile;
- return;
- }
-
- _steps = ESteps.UnpackHashFile;
- }
-
- if (_steps == ESteps.UnpackHashFile)
- {
- if (_hashWebFileRequestOp == null)
- {
- string sourcePath = _fileSystem.GetBuildinPackageHashFilePath(_buildinPackageVersion);
- string destPath = GetCopyPackageHashDestPath(_buildinPackageVersion);
- string url = DownloadSystemHelper.ConvertToWWWPath(sourcePath);
- _hashWebFileRequestOp = new UnityWebFileRequestOperation(url, destPath, 60);
- _hashWebFileRequestOp.StartOperation();
- AddChildOperation(_hashWebFileRequestOp);
- }
-
- _hashWebFileRequestOp.UpdateOperation();
- if (_hashWebFileRequestOp.IsDone == false)
- return;
-
- if (_hashWebFileRequestOp.Status == EOperationStatus.Succeed)
- {
- _steps = ESteps.CheckManifestFile;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _hashWebFileRequestOp.Error;
- }
- }
-
- if (_steps == ESteps.CheckManifestFile)
- {
- string manifestFilePath = GetCopyPackageManifestDestPath(_buildinPackageVersion);
- if (File.Exists(manifestFilePath))
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- return;
- }
-
- _steps = ESteps.UnpackManifestFile;
- }
-
- if (_steps == ESteps.UnpackManifestFile)
- {
- if (_manifestWebFileRequestOp == null)
- {
- string sourcePath = _fileSystem.GetBuildinPackageManifestFilePath(_buildinPackageVersion);
- string destPath = GetCopyPackageManifestDestPath(_buildinPackageVersion);
- string url = DownloadSystemHelper.ConvertToWWWPath(sourcePath);
- _manifestWebFileRequestOp = new UnityWebFileRequestOperation(url, destPath, 60);
- _manifestWebFileRequestOp.StartOperation();
- AddChildOperation(_manifestWebFileRequestOp);
- }
-
- _manifestWebFileRequestOp.UpdateOperation();
- if (_manifestWebFileRequestOp.IsDone == false)
- return;
-
- if (_manifestWebFileRequestOp.Status == EOperationStatus.Succeed)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = _manifestWebFileRequestOp.Error;
- }
- }
- }
-
- private string GetCopyManifestFileRoot()
- {
- string destRoot = _fileSystem.CopyBuildinPackageManifestDestRoot;
- if (string.IsNullOrEmpty(destRoot))
- {
- string defaultCacheRoot = YooAssetSettingsData.GetYooDefaultCacheRoot();
- destRoot = PathUtility.Combine(defaultCacheRoot, _fileSystem.PackageName, DefaultCacheFileSystemDefine.ManifestFilesFolderName);
- }
- return destRoot;
- }
- private string GetCopyPackageHashDestPath(string packageVersion)
- {
- string fileRoot = GetCopyManifestFileRoot();
- string fileName = YooAssetSettingsData.GetPackageHashFileName(_fileSystem.PackageName, packageVersion);
- return PathUtility.Combine(fileRoot, fileName);
- }
- private string GetCopyPackageManifestDestPath(string packageVersion)
- {
- string fileRoot = GetCopyManifestFileRoot();
- string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_fileSystem.PackageName, packageVersion);
- return PathUtility.Combine(fileRoot, fileName);
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
index 0eba7b1e..8b4e53f7 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
namespace YooAsset
{
@@ -7,29 +8,50 @@ namespace YooAsset
private enum ESteps
{
None,
- RequestData,
+ TryLoadFileData,
+ RequestFileData,
LoadCatalog,
Done,
}
private readonly DefaultBuildinFileSystem _fileSystem;
private UnityWebDataRequestOperation _webDataRequestOp;
+ private byte[] _fileData;
private ESteps _steps = ESteps.None;
+ ///
+ /// 内置资源目录
+ ///
+ public DefaultBuildinFileCatalog Catalog;
+
internal LoadBuildinCatalogFileOperation(DefaultBuildinFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
internal override void InternalStart()
{
- _steps = ESteps.RequestData;
+ _steps = ESteps.TryLoadFileData;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.RequestData)
+ if (_steps == ESteps.TryLoadFileData)
+ {
+ string filePath = _fileSystem.GetCatalogBinaryFileLoadPath();
+ if (File.Exists(filePath))
+ {
+ _fileData = File.ReadAllBytes(filePath);
+ _steps = ESteps.LoadCatalog;
+ }
+ else
+ {
+ _steps = ESteps.RequestFileData;
+ }
+ }
+
+ if (_steps == ESteps.RequestFileData)
{
if (_webDataRequestOp == null)
{
@@ -46,6 +68,7 @@ namespace YooAsset
if (_webDataRequestOp.Status == EOperationStatus.Succeed)
{
+ _fileData = _webDataRequestOp.Result;
_steps = ESteps.LoadCatalog;
}
else
@@ -60,22 +83,7 @@ namespace YooAsset
{
try
{
- var catalog = CatalogTools.DeserializeFromBinary(_webDataRequestOp.Result);
- if (catalog.PackageName != _fileSystem.PackageName)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
- return;
- }
-
- foreach (var wrapper in catalog.Wrappers)
- {
- var fileWrapper = new DefaultBuildinFileSystem.FileWrapper(wrapper.FileName);
- _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
- }
-
- YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
+ Catalog = CatalogTools.DeserializeFromBinary(_fileData);
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
index 4a20bc91..76b912bb 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
@@ -1,4 +1,5 @@
-
+using System.IO;
+
namespace YooAsset
{
internal class LoadBuildinPackageManifestOperation : AsyncOperationBase
@@ -6,6 +7,7 @@ namespace YooAsset
private enum ESteps
{
None,
+ TryLoadFileData,
RequestFileData,
VerifyFileData,
LoadManifest,
@@ -17,6 +19,7 @@ namespace YooAsset
private readonly string _packageHash;
private UnityWebDataRequestOperation _webDataRequestOp;
private DeserializeManifestOperation _deserializer;
+ private byte[] _fileData;
private ESteps _steps = ESteps.None;
///
@@ -33,13 +36,27 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.RequestFileData;
+ _steps = ESteps.TryLoadFileData;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.TryLoadFileData)
+ {
+ string filePath = _fileSystem.GetBuildinPackageManifestFilePath(_packageVersion);
+ if (File.Exists(filePath))
+ {
+ _fileData = File.ReadAllBytes(filePath);
+ _steps = ESteps.VerifyFileData;
+ }
+ else
+ {
+ _steps = ESteps.RequestFileData;
+ }
+ }
+
if (_steps == ESteps.RequestFileData)
{
if (_webDataRequestOp == null)
@@ -57,6 +74,7 @@ namespace YooAsset
if (_webDataRequestOp.Status == EOperationStatus.Succeed)
{
+ _fileData = _webDataRequestOp.Result;
_steps = ESteps.VerifyFileData;
}
else
@@ -69,7 +87,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData)
{
- if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
+ if (ManifestTools.VerifyManifestData(_fileData, _packageHash))
{
_steps = ESteps.LoadManifest;
}
@@ -85,7 +103,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _webDataRequestOp.Result);
+ _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _fileData);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageHashOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageHashOperation.cs
index c707a611..df4a156a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageHashOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageHashOperation.cs
@@ -1,4 +1,5 @@
-
+using System.IO;
+
namespace YooAsset
{
internal class RequestBuildinPackageHashOperation : AsyncOperationBase
@@ -6,7 +7,9 @@ namespace YooAsset
private enum ESteps
{
None,
+ TryLoadPackageHash,
RequestPackageHash,
+ CheckResult,
Done,
}
@@ -28,13 +31,27 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.RequestPackageHash;
+ _steps = ESteps.TryLoadPackageHash;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.TryLoadPackageHash)
+ {
+ string filePath = _fileSystem.GetBuildinPackageHashFilePath(_packageVersion);
+ if (File.Exists(filePath))
+ {
+ PackageHash = File.ReadAllText(filePath);
+ _steps = ESteps.CheckResult;
+ }
+ else
+ {
+ _steps = ESteps.RequestPackageHash;
+ }
+ }
+
if (_steps == ESteps.RequestPackageHash)
{
if (_webTextRequestOp == null)
@@ -53,17 +70,7 @@ namespace YooAsset
if (_webTextRequestOp.Status == EOperationStatus.Succeed)
{
PackageHash = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageHash))
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Buildin package hash file content is empty !";
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
+ _steps = ESteps.CheckResult;
}
else
{
@@ -72,6 +79,21 @@ namespace YooAsset
Error = _webTextRequestOp.Error;
}
}
+
+ if (_steps == ESteps.CheckResult)
+ {
+ if (string.IsNullOrEmpty(PackageHash))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Buildin package hash file content is empty !";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageVersionOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageVersionOperation.cs
index 5ebab685..d93e2ea2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageVersionOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/RequestBuildinPackageVersionOperation.cs
@@ -1,4 +1,5 @@
-
+using System.IO;
+
namespace YooAsset
{
internal class RequestBuildinPackageVersionOperation : AsyncOperationBase
@@ -6,7 +7,9 @@ namespace YooAsset
private enum ESteps
{
None,
+ TryLoadPackageVersion,
RequestPackageVersion,
+ CheckResult,
Done,
}
@@ -26,13 +29,27 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.RequestPackageVersion;
+ _steps = ESteps.TryLoadPackageVersion;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.TryLoadPackageVersion)
+ {
+ string filePath = _fileSystem.GetBuildinPackageVersionFilePath();
+ if (File.Exists(filePath))
+ {
+ PackageVersion = File.ReadAllText(filePath);
+ _steps = ESteps.CheckResult;
+ }
+ else
+ {
+ _steps = ESteps.RequestPackageVersion;
+ }
+ }
+
if (_steps == ESteps.RequestPackageVersion)
{
if (_webTextRequestOp == null)
@@ -51,17 +68,7 @@ namespace YooAsset
if (_webTextRequestOp.Status == EOperationStatus.Succeed)
{
PackageVersion = _webTextRequestOp.Result;
- if (string.IsNullOrEmpty(PackageVersion))
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Buildin package version file content is empty !";
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
+ _steps = ESteps.CheckResult;
}
else
{
@@ -70,6 +77,21 @@ namespace YooAsset
Error = _webTextRequestOp.Error;
}
}
+
+ if (_steps == ESteps.CheckResult)
+ {
+ if (string.IsNullOrEmpty(PackageVersion))
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Buildin package version file content is empty !";
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ }
}
}
}
\ No newline at end of file