UnityWebFileRequestOperation.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using UnityEngine.Networking;
  2. using UnityEngine;
  3. namespace YooAsset
  4. {
  5. internal class UnityWebFileRequestOperation : UnityWebRequestOperation
  6. {
  7. private UnityWebRequestAsyncOperation _requestOperation;
  8. private readonly string _fileSavePath;
  9. internal UnityWebFileRequestOperation(string url, string fileSavePath, int timeout = 60) : base(url, timeout)
  10. {
  11. _fileSavePath = fileSavePath;
  12. }
  13. internal override void InternalStart()
  14. {
  15. _steps = ESteps.CreateRequest;
  16. }
  17. internal override void InternalUpdate()
  18. {
  19. if (_steps == ESteps.None || _steps == ESteps.Done)
  20. return;
  21. if (_steps == ESteps.CreateRequest)
  22. {
  23. _latestDownloadBytes = 0;
  24. _latestDownloadRealtime = Time.realtimeSinceStartup;
  25. CreateWebRequest();
  26. _steps = ESteps.Download;
  27. }
  28. if (_steps == ESteps.Download)
  29. {
  30. Progress = _requestOperation.progress;
  31. if (_requestOperation.isDone == false)
  32. {
  33. CheckRequestTimeout();
  34. return;
  35. }
  36. if (CheckRequestResult())
  37. {
  38. _steps = ESteps.Done;
  39. Status = EOperationStatus.Succeed;
  40. }
  41. else
  42. {
  43. _steps = ESteps.Done;
  44. Status = EOperationStatus.Failed;
  45. }
  46. // 注意:最终释放请求器
  47. DisposeRequest();
  48. }
  49. }
  50. internal override void InternalAbort()
  51. {
  52. _steps = ESteps.Done;
  53. DisposeRequest();
  54. }
  55. private void CreateWebRequest()
  56. {
  57. _webRequest = DownloadSystemHelper.NewUnityWebRequestGet(_requestURL);
  58. DownloadHandlerFile handler = new DownloadHandlerFile(_fileSavePath);
  59. handler.removeFileOnAbort = true;
  60. _webRequest.downloadHandler = handler;
  61. _webRequest.disposeDownloadHandlerOnDispose = true;
  62. _requestOperation = _webRequest.SendWebRequest();
  63. }
  64. }
  65. }