DBFSInitializeOperation.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System;
  2. using System.IO;
  3. namespace YooAsset
  4. {
  5. internal class DBFSInitializeOperation : FSInitializeFileSystemOperation
  6. {
  7. private enum ESteps
  8. {
  9. None,
  10. CopyBuildinManifest,
  11. InitUnpackFileSystem,
  12. LoadCatalogFile,
  13. Done,
  14. }
  15. private readonly DefaultBuildinFileSystem _fileSystem;
  16. private CopyBuildinPackageManifestOperation _copyBuildinPackageManifestOp;
  17. private FSInitializeFileSystemOperation _initUnpackFIleSystemOp;
  18. private LoadBuildinCatalogFileOperation _loadCatalogFileOp;
  19. private ESteps _steps = ESteps.None;
  20. internal DBFSInitializeOperation(DefaultBuildinFileSystem fileSystem)
  21. {
  22. _fileSystem = fileSystem;
  23. }
  24. internal override void InternalStart()
  25. {
  26. #if UNITY_WEBGL
  27. _steps = ESteps.Done;
  28. Status = EOperationStatus.Failed;
  29. Error = $"{nameof(DefaultBuildinFileSystem)} is not support WEBGL platform !";
  30. #else
  31. if (_fileSystem.CopyBuildinPackageManifest)
  32. _steps = ESteps.CopyBuildinManifest;
  33. else
  34. _steps = ESteps.InitUnpackFileSystem;
  35. #endif
  36. }
  37. internal override void InternalUpdate()
  38. {
  39. if (_steps == ESteps.None || _steps == ESteps.Done)
  40. return;
  41. if (_steps == ESteps.CopyBuildinManifest)
  42. {
  43. if (_copyBuildinPackageManifestOp == null)
  44. {
  45. _copyBuildinPackageManifestOp = new CopyBuildinPackageManifestOperation(_fileSystem);
  46. _copyBuildinPackageManifestOp.StartOperation();
  47. AddChildOperation(_copyBuildinPackageManifestOp);
  48. }
  49. _copyBuildinPackageManifestOp.UpdateOperation();
  50. if (_copyBuildinPackageManifestOp.IsDone == false)
  51. return;
  52. if (_copyBuildinPackageManifestOp.Status == EOperationStatus.Succeed)
  53. {
  54. _steps = ESteps.InitUnpackFileSystem;
  55. }
  56. else
  57. {
  58. _steps = ESteps.Done;
  59. Status = EOperationStatus.Failed;
  60. Error = _copyBuildinPackageManifestOp.Error;
  61. }
  62. }
  63. if (_steps == ESteps.InitUnpackFileSystem)
  64. {
  65. if (_initUnpackFIleSystemOp == null)
  66. {
  67. _initUnpackFIleSystemOp = _fileSystem.InitializeUpackFileSystem();
  68. _initUnpackFIleSystemOp.StartOperation();
  69. AddChildOperation(_initUnpackFIleSystemOp);
  70. }
  71. _initUnpackFIleSystemOp.UpdateOperation();
  72. Progress = _initUnpackFIleSystemOp.Progress;
  73. if (_initUnpackFIleSystemOp.IsDone == false)
  74. return;
  75. if (_initUnpackFIleSystemOp.Status == EOperationStatus.Succeed)
  76. {
  77. if (_fileSystem.DisableCatalogFile)
  78. {
  79. _steps = ESteps.Done;
  80. Status = EOperationStatus.Succeed;
  81. }
  82. else
  83. {
  84. _steps = ESteps.LoadCatalogFile;
  85. }
  86. }
  87. else
  88. {
  89. _steps = ESteps.Done;
  90. Status = EOperationStatus.Failed;
  91. Error = _initUnpackFIleSystemOp.Error;
  92. }
  93. }
  94. if (_steps == ESteps.LoadCatalogFile)
  95. {
  96. if (_loadCatalogFileOp == null)
  97. {
  98. #if UNITY_EDITOR
  99. // 兼容性初始化
  100. // 说明:内置文件系统在编辑器下运行时需要动态生成
  101. string packageRoot = _fileSystem.FileRoot;
  102. bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
  103. if (result == false)
  104. {
  105. _steps = ESteps.Done;
  106. Status = EOperationStatus.Failed;
  107. Error = $"Create package catalog file failed ! See the detail error in console !";
  108. return;
  109. }
  110. #endif
  111. _loadCatalogFileOp = new LoadBuildinCatalogFileOperation(_fileSystem);
  112. _loadCatalogFileOp.StartOperation();
  113. AddChildOperation(_loadCatalogFileOp);
  114. }
  115. _loadCatalogFileOp.UpdateOperation();
  116. if (_loadCatalogFileOp.IsDone == false)
  117. return;
  118. if (_loadCatalogFileOp.Status == EOperationStatus.Succeed)
  119. {
  120. _steps = ESteps.Done;
  121. Status = EOperationStatus.Succeed;
  122. }
  123. else
  124. {
  125. _steps = ESteps.Done;
  126. Status = EOperationStatus.Failed;
  127. Error = _loadCatalogFileOp.Error;
  128. }
  129. }
  130. }
  131. }
  132. }