DownloadFileWrapper.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 
  2. namespace YooAsset
  3. {
  4. internal class DownloadFileWrapper : FSDownloadFileOperation
  5. {
  6. private enum ESteps
  7. {
  8. None,
  9. Download,
  10. Done,
  11. }
  12. private readonly FSDownloadFileOperation _downloadFileOp;
  13. private ESteps _steps = ESteps.None;
  14. internal DownloadFileWrapper(FSDownloadFileOperation downloadFileOp) : base(downloadFileOp.Bundle)
  15. {
  16. _downloadFileOp = downloadFileOp;
  17. }
  18. internal override void InternalStart()
  19. {
  20. _steps = ESteps.Download;
  21. }
  22. internal override void InternalUpdate()
  23. {
  24. if (_steps == ESteps.None || _steps == ESteps.Done)
  25. return;
  26. if (_steps == ESteps.Download)
  27. {
  28. if (IsWaitForAsyncComplete)
  29. _downloadFileOp.WaitForAsyncComplete();
  30. if (_downloadFileOp.Status == EOperationStatus.None)
  31. return;
  32. _downloadFileOp.UpdateOperation();
  33. Progress = _downloadFileOp.Progress;
  34. DownloadedBytes = _downloadFileOp.DownloadedBytes;
  35. DownloadProgress = _downloadFileOp.DownloadProgress;
  36. if (_downloadFileOp.IsDone == false)
  37. return;
  38. _steps = ESteps.Done;
  39. Status = _downloadFileOp.Status;
  40. Error = _downloadFileOp.Error;
  41. HttpCode = _downloadFileOp.HttpCode;
  42. }
  43. }
  44. internal override void InternalWaitForAsyncComplete()
  45. {
  46. while (true)
  47. {
  48. if (ExecuteWhileDone())
  49. {
  50. _steps = ESteps.Done;
  51. break;
  52. }
  53. }
  54. }
  55. public override void Release()
  56. {
  57. _downloadFileOp.Release();
  58. }
  59. public override void Reference()
  60. {
  61. _downloadFileOp.Reference();
  62. }
  63. }
  64. }