UpdatePackageVersionOperation.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace YooAsset
  5. {
  6. /// <summary>
  7. /// 请求远端包裹的最新版本
  8. /// </summary>
  9. public abstract class UpdatePackageVersionOperation : AsyncOperationBase
  10. {
  11. /// <summary>
  12. /// 当前最新的包裹版本
  13. /// </summary>
  14. public string PackageVersion { protected set; get; }
  15. }
  16. /// <summary>
  17. /// 编辑器下模拟模式的请求远端包裹的最新版本
  18. /// </summary>
  19. internal sealed class EditorPlayModeUpdatePackageVersionOperation : UpdatePackageVersionOperation
  20. {
  21. internal override void InternalOnStart()
  22. {
  23. Status = EOperationStatus.Succeed;
  24. }
  25. internal override void InternalOnUpdate()
  26. {
  27. }
  28. }
  29. /// <summary>
  30. /// 离线模式的请求远端包裹的最新版本
  31. /// </summary>
  32. internal sealed class OfflinePlayModeUpdatePackageVersionOperation : UpdatePackageVersionOperation
  33. {
  34. internal override void InternalOnStart()
  35. {
  36. Status = EOperationStatus.Succeed;
  37. }
  38. internal override void InternalOnUpdate()
  39. {
  40. }
  41. }
  42. /// <summary>
  43. /// 联机模式的请求远端包裹的最新版本
  44. /// </summary>
  45. internal sealed class HostPlayModeUpdatePackageVersionOperation : UpdatePackageVersionOperation
  46. {
  47. private enum ESteps
  48. {
  49. None,
  50. QueryRemotePackageVersion,
  51. Done,
  52. }
  53. private readonly HostPlayModeImpl _impl;
  54. private readonly bool _appendTimeTicks;
  55. private readonly int _timeout;
  56. private QueryRemotePackageVersionOperation _queryRemotePackageVersionOp;
  57. private ESteps _steps = ESteps.None;
  58. internal HostPlayModeUpdatePackageVersionOperation(HostPlayModeImpl impl, bool appendTimeTicks, int timeout)
  59. {
  60. _impl = impl;
  61. _appendTimeTicks = appendTimeTicks;
  62. _timeout = timeout;
  63. }
  64. internal override void InternalOnStart()
  65. {
  66. _steps = ESteps.QueryRemotePackageVersion;
  67. }
  68. internal override void InternalOnUpdate()
  69. {
  70. if (_steps == ESteps.None || _steps == ESteps.Done)
  71. return;
  72. if (_steps == ESteps.QueryRemotePackageVersion)
  73. {
  74. if (_queryRemotePackageVersionOp == null)
  75. {
  76. _queryRemotePackageVersionOp = new QueryRemotePackageVersionOperation(_impl.RemoteServices, _impl.PackageName, _appendTimeTicks, _timeout);
  77. OperationSystem.StartOperation(_impl.PackageName, _queryRemotePackageVersionOp);
  78. }
  79. if (_queryRemotePackageVersionOp.IsDone == false)
  80. return;
  81. if (_queryRemotePackageVersionOp.Status == EOperationStatus.Succeed)
  82. {
  83. PackageVersion = _queryRemotePackageVersionOp.PackageVersion;
  84. _steps = ESteps.Done;
  85. Status = EOperationStatus.Succeed;
  86. }
  87. else
  88. {
  89. _steps = ESteps.Done;
  90. Status = EOperationStatus.Failed;
  91. Error = _queryRemotePackageVersionOp.Error;
  92. }
  93. }
  94. }
  95. }
  96. /// <summary>
  97. /// WebGL模式的请求远端包裹的最新版本
  98. /// </summary>
  99. internal sealed class WebPlayModeUpdatePackageVersionOperation : UpdatePackageVersionOperation
  100. {
  101. private enum ESteps
  102. {
  103. None,
  104. QueryRemotePackageVersion,
  105. Done,
  106. }
  107. private readonly WebPlayModeImpl _impl;
  108. private readonly bool _appendTimeTicks;
  109. private readonly int _timeout;
  110. private QueryRemotePackageVersionOperation _queryRemotePackageVersionOp;
  111. private ESteps _steps = ESteps.None;
  112. internal WebPlayModeUpdatePackageVersionOperation(WebPlayModeImpl impl, bool appendTimeTicks, int timeout)
  113. {
  114. _impl = impl;
  115. _appendTimeTicks = appendTimeTicks;
  116. _timeout = timeout;
  117. }
  118. internal override void InternalOnStart()
  119. {
  120. _steps = ESteps.QueryRemotePackageVersion;
  121. }
  122. internal override void InternalOnUpdate()
  123. {
  124. if (_steps == ESteps.None || _steps == ESteps.Done)
  125. return;
  126. if (_steps == ESteps.QueryRemotePackageVersion)
  127. {
  128. if (_queryRemotePackageVersionOp == null)
  129. {
  130. _queryRemotePackageVersionOp = new QueryRemotePackageVersionOperation(_impl.RemoteServices, _impl.PackageName, _appendTimeTicks, _timeout);
  131. OperationSystem.StartOperation(_impl.PackageName, _queryRemotePackageVersionOp);
  132. }
  133. if (_queryRemotePackageVersionOp.IsDone == false)
  134. return;
  135. if (_queryRemotePackageVersionOp.Status == EOperationStatus.Succeed)
  136. {
  137. PackageVersion = _queryRemotePackageVersionOp.PackageVersion;
  138. _steps = ESteps.Done;
  139. Status = EOperationStatus.Succeed;
  140. }
  141. else
  142. {
  143. _steps = ESteps.Done;
  144. Status = EOperationStatus.Failed;
  145. Error = _queryRemotePackageVersionOp.Error;
  146. }
  147. }
  148. }
  149. }
  150. }