| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System;
- using System.Collections;
- using System.Collections.Concurrent;
- using UnityEngine.Networking;
- using UnityEngine;
- namespace YooAsset
- {
- internal abstract class UnityWebRequesterBase
- {
- protected UnityWebRequest _webRequest;
- protected UnityWebRequestAsyncOperation _operationHandle;
- // 超时相关
- private float _timeout;
- private bool _isAbort = false;
- private ulong _latestDownloadBytes;
- private float _latestDownloadRealtime;
- /// <summary>
- /// 请求URL地址
- /// </summary>
- public string URL { protected set; get; }
- protected void ResetTimeout(float timeout)
- {
- _timeout = timeout;
- _latestDownloadBytes = 0;
- _latestDownloadRealtime = Time.realtimeSinceStartup;
- }
- /// <summary>
- /// 释放下载器
- /// </summary>
- public void Dispose()
- {
- if (_webRequest != null)
- {
- _webRequest.Dispose();
- _webRequest = null;
- _operationHandle = null;
- }
- }
- /// <summary>
- /// 是否完毕(无论成功失败)
- /// </summary>
- public bool IsDone()
- {
- if (_operationHandle == null)
- return false;
- return _operationHandle.isDone;
- }
- /// <summary>
- /// 下载进度
- /// </summary>
- public float Progress()
- {
- if (_operationHandle == null)
- return 0;
- return _operationHandle.progress;
- }
- /// <summary>
- /// 下载是否发生错误
- /// </summary>
- public bool HasError()
- {
- #if UNITY_2020_3_OR_NEWER
- return _webRequest.result != UnityWebRequest.Result.Success;
- #else
- if (_webRequest.isNetworkError || _webRequest.isHttpError)
- return true;
- else
- return false;
- #endif
- }
- /// <summary>
- /// 获取错误信息
- /// </summary>
- public string GetError()
- {
- if (_webRequest != null)
- {
- return $"URL : {URL} Error : {_webRequest.error}";
- }
- return string.Empty;
- }
- /// <summary>
- /// 检测超时
- /// </summary>
- public void CheckTimeout()
- {
- // 注意:在连续时间段内无新增下载数据及判定为超时
- if (_isAbort == false)
- {
- if (_latestDownloadBytes != _webRequest.downloadedBytes)
- {
- _latestDownloadBytes = _webRequest.downloadedBytes;
- _latestDownloadRealtime = Time.realtimeSinceStartup;
- }
- float offset = Time.realtimeSinceStartup - _latestDownloadRealtime;
- if (offset > _timeout)
- {
- _webRequest.Abort();
- _isAbort = true;
- }
- }
- }
- }
- }
|