com.alicizax.unity.tuyoogam.../Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/CopyBuildinPackageManifestOperation.cs

173 lines
6.6 KiB
C#
Raw Normal View History

2025-02-28 16:11:01 +08:00
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;
2025-09-02 19:21:49 +08:00
private UnityWebFileRequestOperation _hashWebFileRequestOp;
private UnityWebFileRequestOperation _manifestWebFileRequestOp;
2025-02-28 16:11:01 +08:00
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)
{
2025-09-02 19:21:49 +08:00
if (_hashWebFileRequestOp == null)
2025-02-28 16:11:01 +08:00
{
string sourcePath = _fileSystem.GetBuildinPackageHashFilePath(_buildinPackageVersion);
string destPath = GetCopyPackageHashDestPath(_buildinPackageVersion);
string url = DownloadSystemHelper.ConvertToWWWPath(sourcePath);
2025-09-02 19:21:49 +08:00
_hashWebFileRequestOp = new UnityWebFileRequestOperation(url, destPath, 60);
_hashWebFileRequestOp.StartOperation();
AddChildOperation(_hashWebFileRequestOp);
2025-02-28 16:11:01 +08:00
}
2025-09-02 19:21:49 +08:00
_hashWebFileRequestOp.UpdateOperation();
if (_hashWebFileRequestOp.IsDone == false)
2025-02-28 16:11:01 +08:00
return;
2025-09-02 19:21:49 +08:00
if (_hashWebFileRequestOp.Status == EOperationStatus.Succeed)
2025-02-28 16:11:01 +08:00
{
_steps = ESteps.CheckManifestFile;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
2025-09-02 19:21:49 +08:00
Error = _hashWebFileRequestOp.Error;
2025-02-28 16:11:01 +08:00
}
}
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)
{
2025-09-02 19:21:49 +08:00
if (_manifestWebFileRequestOp == null)
2025-02-28 16:11:01 +08:00
{
string sourcePath = _fileSystem.GetBuildinPackageManifestFilePath(_buildinPackageVersion);
string destPath = GetCopyPackageManifestDestPath(_buildinPackageVersion);
string url = DownloadSystemHelper.ConvertToWWWPath(sourcePath);
2025-09-02 19:21:49 +08:00
_manifestWebFileRequestOp = new UnityWebFileRequestOperation(url, destPath, 60);
_manifestWebFileRequestOp.StartOperation();
AddChildOperation(_manifestWebFileRequestOp);
2025-02-28 16:11:01 +08:00
}
2025-09-02 19:21:49 +08:00
_manifestWebFileRequestOp.UpdateOperation();
if (_manifestWebFileRequestOp.IsDone == false)
2025-02-28 16:11:01 +08:00
return;
2025-09-02 19:21:49 +08:00
if (_manifestWebFileRequestOp.Status == EOperationStatus.Succeed)
2025-02-28 16:11:01 +08:00
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
2025-09-02 19:21:49 +08:00
Error = _manifestWebFileRequestOp.Error;
2025-02-28 16:11:01 +08:00
}
}
}
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);
}
}
}