Files
YooAsset/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOperation.cs

131 lines
4.4 KiB
C#
Raw Normal View History


namespace YooAsset
{
public abstract class ClearCacheFilesOperation : AsyncOperationBase
{
}
internal sealed class ClearCacheFilesImplOperation : ClearCacheFilesOperation
{
private enum ESteps
{
None,
2024-07-05 15:10:07 +08:00
ClearFileSystemA,
ClearFileSystemB,
ClearFileSystemC,
Done,
}
2024-07-05 15:10:07 +08:00
private readonly IPlayMode _impl;
private readonly IFileSystem _fileSystemA;
private readonly IFileSystem _fileSystemB;
private readonly IFileSystem _fileSystemC;
2024-12-13 10:25:16 +08:00
private readonly string _clearMode;
private readonly object _clearParam;
private FSClearCacheFilesOperation _clearCacheFilesOpA;
private FSClearCacheFilesOperation _clearCacheFilesOpB;
private FSClearCacheFilesOperation _clearCacheFilesOpC;
private ESteps _steps = ESteps.None;
2024-12-13 10:25:16 +08:00
internal ClearCacheFilesImplOperation(IPlayMode impl, IFileSystem fileSystemA, IFileSystem fileSystemB, IFileSystem fileSystemC, string clearMode, object clearParam)
{
_impl = impl;
2024-07-05 15:10:07 +08:00
_fileSystemA = fileSystemA;
_fileSystemB = fileSystemB;
_fileSystemC = fileSystemC;
2024-12-13 10:25:16 +08:00
_clearMode = clearMode;
_clearParam = clearParam;
}
2025-02-22 16:29:25 +08:00
internal override void InternalStart()
{
2024-07-05 15:10:07 +08:00
_steps = ESteps.ClearFileSystemA;
}
2025-02-22 16:29:25 +08:00
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
2024-07-05 15:10:07 +08:00
if (_steps == ESteps.ClearFileSystemA)
{
if (_fileSystemA == null)
{
_steps = ESteps.ClearFileSystemB;
return;
}
if (_clearCacheFilesOpA == null)
_clearCacheFilesOpA = _fileSystemA.ClearCacheFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam);
Progress = _clearCacheFilesOpA.Progress;
if (_clearCacheFilesOpA.IsDone == false)
return;
if (_clearCacheFilesOpA.Status == EOperationStatus.Succeed)
{
2024-07-05 15:10:07 +08:00
_steps = ESteps.ClearFileSystemB;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _clearCacheFilesOpA.Error;
}
}
2024-07-05 15:10:07 +08:00
if (_steps == ESteps.ClearFileSystemB)
{
2024-07-05 15:10:07 +08:00
if (_fileSystemB == null)
{
2024-07-05 15:10:07 +08:00
_steps = ESteps.ClearFileSystemC;
return;
}
if (_clearCacheFilesOpB == null)
_clearCacheFilesOpB = _fileSystemB.ClearCacheFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam);
Progress = _clearCacheFilesOpB.Progress;
if (_clearCacheFilesOpB.IsDone == false)
return;
if (_clearCacheFilesOpB.Status == EOperationStatus.Succeed)
{
2024-07-05 15:10:07 +08:00
_steps = ESteps.ClearFileSystemC;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _clearCacheFilesOpB.Error;
}
}
2024-07-05 15:10:07 +08:00
if (_steps == ESteps.ClearFileSystemC)
{
2024-07-05 15:10:07 +08:00
if (_fileSystemC == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
2024-07-05 15:10:07 +08:00
return;
}
if (_clearCacheFilesOpC == null)
_clearCacheFilesOpC = _fileSystemC.ClearCacheFilesAsync(_impl.ActiveManifest, _clearMode, _clearParam);
Progress = _clearCacheFilesOpC.Progress;
if (_clearCacheFilesOpC.IsDone == false)
return;
if (_clearCacheFilesOpC.Status == EOperationStatus.Succeed)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _clearCacheFilesOpC.Error;
}
}
}
}
}