UpdatePackageVersionOperation.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 Start()
  22. {
  23. Status = EOperationStatus.Succeed;
  24. }
  25. internal override void Update()
  26. {
  27. }
  28. }
  29. /// <summary>
  30. /// 离线模式的请求远端包裹的最新版本
  31. /// </summary>
  32. internal sealed class OfflinePlayModeUpdatePackageVersionOperation : UpdatePackageVersionOperation
  33. {
  34. internal override void Start()
  35. {
  36. Status = EOperationStatus.Succeed;
  37. }
  38. internal override void Update()
  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 string _packageName;
  55. private readonly bool _appendTimeTicks;
  56. private readonly int _timeout;
  57. private QueryRemotePackageVersionOperation _queryRemotePackageVersionOp;
  58. private ESteps _steps = ESteps.None;
  59. internal HostPlayModeUpdatePackageVersionOperation(HostPlayModeImpl impl, string packageName, bool appendTimeTicks, int timeout)
  60. {
  61. _impl = impl;
  62. _packageName = packageName;
  63. _appendTimeTicks = appendTimeTicks;
  64. _timeout = timeout;
  65. }
  66. internal override void Start()
  67. {
  68. _steps = ESteps.QueryRemotePackageVersion;
  69. }
  70. internal override void Update()
  71. {
  72. if (_steps == ESteps.None || _steps == ESteps.Done)
  73. return;
  74. if (_steps == ESteps.QueryRemotePackageVersion)
  75. {
  76. if (_queryRemotePackageVersionOp == null)
  77. {
  78. _queryRemotePackageVersionOp = new QueryRemotePackageVersionOperation(_impl.RemoteServices, _packageName, _appendTimeTicks, _timeout);
  79. OperationSystem.StartOperation(_queryRemotePackageVersionOp);
  80. }
  81. if (_queryRemotePackageVersionOp.IsDone == false)
  82. return;
  83. if (_queryRemotePackageVersionOp.Status == EOperationStatus.Succeed)
  84. {
  85. PackageVersion = _queryRemotePackageVersionOp.PackageVersion;
  86. _steps = ESteps.Done;
  87. Status = EOperationStatus.Succeed;
  88. }
  89. else
  90. {
  91. _steps = ESteps.Done;
  92. Status = EOperationStatus.Failed;
  93. Error = _queryRemotePackageVersionOp.Error;
  94. }
  95. }
  96. }
  97. }
  98. }