DownloadManifestOperation.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. 
  2. namespace YooAsset
  3. {
  4. internal class DownloadManifestOperation : AsyncOperationBase
  5. {
  6. private enum ESteps
  7. {
  8. None,
  9. DownloadPackageHashFile,
  10. DownloadManifestFile,
  11. Done,
  12. }
  13. private static int RequestCount = 0;
  14. private readonly IRemoteServices _remoteServices;
  15. private readonly string _packageName;
  16. private readonly string _packageVersion;
  17. private readonly int _timeout;
  18. private UnityWebFileRequester _downloader1;
  19. private UnityWebFileRequester _downloader2;
  20. private ESteps _steps = ESteps.None;
  21. internal DownloadManifestOperation(IRemoteServices remoteServices, string packageName, string packageVersion, int timeout)
  22. {
  23. _remoteServices = remoteServices;
  24. _packageName = packageName;
  25. _packageVersion = packageVersion;
  26. _timeout = timeout;
  27. }
  28. internal override void Start()
  29. {
  30. RequestCount++;
  31. _steps = ESteps.DownloadPackageHashFile;
  32. }
  33. internal override void Update()
  34. {
  35. if (_steps == ESteps.None || _steps == ESteps.Done)
  36. return;
  37. if (_steps == ESteps.DownloadPackageHashFile)
  38. {
  39. if (_downloader1 == null)
  40. {
  41. string savePath = PersistentTools.GetPersistent(_packageName).GetSandboxPackageHashFilePath(_packageVersion);
  42. string fileName = YooAssetSettingsData.GetPackageHashFileName(_packageName, _packageVersion);
  43. string webURL = GetDownloadRequestURL(fileName);
  44. YooLogger.Log($"Beginning to download package hash file : {webURL}");
  45. _downloader1 = new UnityWebFileRequester();
  46. _downloader1.SendRequest(webURL, savePath, _timeout);
  47. }
  48. _downloader1.CheckTimeout();
  49. if (_downloader1.IsDone() == false)
  50. return;
  51. if (_downloader1.HasError())
  52. {
  53. _steps = ESteps.Done;
  54. Status = EOperationStatus.Failed;
  55. Error = _downloader1.GetError();
  56. }
  57. else
  58. {
  59. _steps = ESteps.DownloadManifestFile;
  60. }
  61. _downloader1.Dispose();
  62. }
  63. if (_steps == ESteps.DownloadManifestFile)
  64. {
  65. if (_downloader2 == null)
  66. {
  67. string savePath = PersistentTools.GetPersistent(_packageName).GetSandboxPackageManifestFilePath(_packageVersion);
  68. string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_packageName, _packageVersion);
  69. string webURL = GetDownloadRequestURL(fileName);
  70. YooLogger.Log($"Beginning to download manifest file : {webURL}");
  71. _downloader2 = new UnityWebFileRequester();
  72. _downloader2.SendRequest(webURL, savePath, _timeout);
  73. }
  74. _downloader2.CheckTimeout();
  75. if (_downloader2.IsDone() == false)
  76. return;
  77. if (_downloader2.HasError())
  78. {
  79. _steps = ESteps.Done;
  80. Status = EOperationStatus.Failed;
  81. Error = _downloader2.GetError();
  82. }
  83. else
  84. {
  85. _steps = ESteps.Done;
  86. Status = EOperationStatus.Succeed;
  87. }
  88. _downloader2.Dispose();
  89. }
  90. }
  91. private string GetDownloadRequestURL(string fileName)
  92. {
  93. // 轮流返回请求地址
  94. if (RequestCount % 2 == 0)
  95. return _remoteServices.GetRemoteFallbackURL(fileName);
  96. else
  97. return _remoteServices.GetRemoteMainURL(fileName);
  98. }
  99. }
  100. }