VerifyTempFileOperation.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Threading;
  6. namespace YooAsset
  7. {
  8. internal abstract class VerifyTempFileOperation : AsyncOperationBase
  9. {
  10. public EVerifyResult VerifyResult { protected set; get; }
  11. public static VerifyTempFileOperation CreateOperation(VerifyTempElement element)
  12. {
  13. #if UNITY_WEBGL
  14. var operation = new VerifyTempFileWithoutThreadOperation(element);
  15. #else
  16. var operation = new VerifyTempFileWithThreadOperation(element);
  17. #endif
  18. return operation;
  19. }
  20. }
  21. /// <summary>
  22. /// 下载文件验证(线程版)
  23. /// </summary>
  24. internal class VerifyTempFileWithThreadOperation : VerifyTempFileOperation
  25. {
  26. private enum ESteps
  27. {
  28. None,
  29. VerifyFile,
  30. Waiting,
  31. Done,
  32. }
  33. private readonly VerifyTempElement _element;
  34. private ESteps _steps = ESteps.None;
  35. public VerifyTempFileWithThreadOperation(VerifyTempElement element)
  36. {
  37. _element = element;
  38. }
  39. internal override void Start()
  40. {
  41. _steps = ESteps.VerifyFile;
  42. }
  43. internal override void Update()
  44. {
  45. if (_steps == ESteps.None || _steps == ESteps.Done)
  46. return;
  47. if (_steps == ESteps.VerifyFile)
  48. {
  49. if (BeginVerifyFileWithThread(_element))
  50. {
  51. _steps = ESteps.Waiting;
  52. }
  53. }
  54. if (_steps == ESteps.Waiting)
  55. {
  56. int result = _element.Result;
  57. if (result == 0)
  58. return;
  59. VerifyResult = (EVerifyResult)result;
  60. if (VerifyResult == EVerifyResult.Succeed)
  61. {
  62. _steps = ESteps.Done;
  63. Status = EOperationStatus.Succeed;
  64. }
  65. else
  66. {
  67. _steps = ESteps.Done;
  68. Status = EOperationStatus.Failed;
  69. Error = $"Failed verify file : {_element.TempDataFilePath} ! ErrorCode : {VerifyResult}";
  70. }
  71. }
  72. }
  73. private bool BeginVerifyFileWithThread(VerifyTempElement element)
  74. {
  75. return ThreadPool.QueueUserWorkItem(new WaitCallback(VerifyInThread), element);
  76. }
  77. private void VerifyInThread(object obj)
  78. {
  79. VerifyTempElement element = (VerifyTempElement)obj;
  80. int result = (int)CacheSystem.VerifyingTempFile(element);
  81. element.Result = result;
  82. }
  83. }
  84. /// <summary>
  85. /// 下载文件验证(非线程版)
  86. /// </summary>
  87. internal class VerifyTempFileWithoutThreadOperation : VerifyTempFileOperation
  88. {
  89. private enum ESteps
  90. {
  91. None,
  92. VerifyFile,
  93. Done,
  94. }
  95. private readonly VerifyTempElement _element;
  96. private ESteps _steps = ESteps.None;
  97. public VerifyTempFileWithoutThreadOperation(VerifyTempElement element)
  98. {
  99. _element = element;
  100. }
  101. internal override void Start()
  102. {
  103. _steps = ESteps.VerifyFile;
  104. }
  105. internal override void Update()
  106. {
  107. if (_steps == ESteps.None || _steps == ESteps.Done)
  108. return;
  109. if (_steps == ESteps.VerifyFile)
  110. {
  111. _element.Result = (int)CacheSystem.VerifyingTempFile(_element);
  112. VerifyResult = (EVerifyResult)_element.Result;
  113. if (VerifyResult == EVerifyResult.Succeed)
  114. {
  115. _steps = ESteps.Done;
  116. Status = EOperationStatus.Succeed;
  117. }
  118. else
  119. {
  120. _steps = ESteps.Done;
  121. Status = EOperationStatus.Failed;
  122. Error = $"Failed verify file : {_element.TempDataFilePath} ! ErrorCode : {VerifyResult}";
  123. }
  124. }
  125. }
  126. }
  127. }