mirror of https://github.com/tuyoogame/YooAsset
98 lines
3.3 KiB
C#
98 lines
3.3 KiB
C#
|
|
namespace YooAsset
|
|
{
|
|
internal class DCFSInitializeOperation : FSInitializeFileSystemOperation
|
|
{
|
|
private enum ESteps
|
|
{
|
|
None,
|
|
CheckAppFootPrint,
|
|
SearchCacheFiles,
|
|
VerifyCacheFiles,
|
|
Done,
|
|
}
|
|
|
|
private readonly DefaultCacheFileSystem _fileSystem;
|
|
private SearchCacheFilesOperation _searchCacheFilesOp;
|
|
private VerifyCacheFilesOperation _verifyCacheFilesOp;
|
|
private ESteps _steps = ESteps.None;
|
|
|
|
|
|
internal DCFSInitializeOperation(DefaultCacheFileSystem fileSystem)
|
|
{
|
|
_fileSystem = fileSystem;
|
|
}
|
|
internal override void InternalOnStart()
|
|
{
|
|
#if UNITY_WEBGL
|
|
_steps = ESteps.Done;
|
|
Status = EOperationStatus.Failed;
|
|
Error = $"{nameof(DefaultCacheFileSystem)} is not support WEBGL platform !";
|
|
#else
|
|
_steps = ESteps.CheckAppFootPrint;
|
|
#endif
|
|
}
|
|
internal override void InternalOnUpdate()
|
|
{
|
|
if (_steps == ESteps.None || _steps == ESteps.Done)
|
|
return;
|
|
|
|
if (_steps == ESteps.CheckAppFootPrint)
|
|
{
|
|
var appFootPrint = new ApplicationFootPrint(_fileSystem);
|
|
appFootPrint.Load(_fileSystem.PackageName);
|
|
|
|
// 如果水印发生变化,则说明覆盖安装后首次打开游戏
|
|
if (appFootPrint.IsDirty())
|
|
{
|
|
_fileSystem.DeleteAllManifestFiles();
|
|
appFootPrint.Coverage(_fileSystem.PackageName);
|
|
YooLogger.Warning("Delete manifest files when application foot print dirty !");
|
|
}
|
|
|
|
_steps = ESteps.SearchCacheFiles;
|
|
}
|
|
|
|
if (_steps == ESteps.SearchCacheFiles)
|
|
{
|
|
if (_searchCacheFilesOp == null)
|
|
{
|
|
_searchCacheFilesOp = new SearchCacheFilesOperation(_fileSystem);
|
|
OperationSystem.StartOperation(_fileSystem.PackageName, _searchCacheFilesOp);
|
|
}
|
|
|
|
Progress = _searchCacheFilesOp.Progress;
|
|
if (_searchCacheFilesOp.IsDone == false)
|
|
return;
|
|
|
|
_steps = ESteps.VerifyCacheFiles;
|
|
}
|
|
|
|
if (_steps == ESteps.VerifyCacheFiles)
|
|
{
|
|
if (_verifyCacheFilesOp == null)
|
|
{
|
|
_verifyCacheFilesOp = new VerifyCacheFilesOperation(_fileSystem, _searchCacheFilesOp.Result);
|
|
OperationSystem.StartOperation(_fileSystem.PackageName, _verifyCacheFilesOp);
|
|
}
|
|
|
|
Progress = _verifyCacheFilesOp.Progress;
|
|
if (_verifyCacheFilesOp.IsDone == false)
|
|
return;
|
|
|
|
if (_verifyCacheFilesOp.Status == EOperationStatus.Succeed)
|
|
{
|
|
_steps = ESteps.Done;
|
|
Status = EOperationStatus.Succeed;
|
|
YooLogger.Log($"Package '{_fileSystem.PackageName}' cached files count : {_fileSystem.FileCount}");
|
|
}
|
|
else
|
|
{
|
|
_steps = ESteps.Done;
|
|
Status = EOperationStatus.Failed;
|
|
Error = _verifyCacheFilesOp.Error;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |