| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using UnityEngine.Networking;
- using UnityEngine;
- namespace YooAsset
- {
- internal class UnityWebFileRequestOperation : UnityWebRequestOperation
- {
- private UnityWebRequestAsyncOperation _requestOperation;
- private readonly string _fileSavePath;
- internal UnityWebFileRequestOperation(string url, string fileSavePath, int timeout = 60) : base(url, timeout)
- {
- _fileSavePath = fileSavePath;
- }
- internal override void InternalStart()
- {
- _steps = ESteps.CreateRequest;
- }
- internal override void InternalUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
- if (_steps == ESteps.CreateRequest)
- {
- _latestDownloadBytes = 0;
- _latestDownloadRealtime = Time.realtimeSinceStartup;
- CreateWebRequest();
- _steps = ESteps.Download;
- }
- if (_steps == ESteps.Download)
- {
- Progress = _requestOperation.progress;
- if (_requestOperation.isDone == false)
- {
- CheckRequestTimeout();
- return;
- }
- if (CheckRequestResult())
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- }
- // 注意:最终释放请求器
- DisposeRequest();
- }
- }
- internal override void InternalAbort()
- {
- _steps = ESteps.Done;
- DisposeRequest();
- }
- private void CreateWebRequest()
- {
- _webRequest = DownloadSystemHelper.NewUnityWebRequestGet(_requestURL);
- DownloadHandlerFile handler = new DownloadHandlerFile(_fileSavePath);
- handler.removeFileOnAbort = true;
- _webRequest.downloadHandler = handler;
- _webRequest.disposeDownloadHandlerOnDispose = true;
- _requestOperation = _webRequest.SendWebRequest();
- }
- }
- }
|