| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | namespace YooAsset{	internal abstract class DownloaderBase	{		protected enum ESteps		{			None,			CheckTempFile,			WaitingCheckTempFile,			PrepareDownload,			CreateResumeDownloader,			CreateGeneralDownloader,			CheckDownload,			VerifyTempFile,			WaitingVerifyTempFile,			CachingFile,			TryAgain,			Succeed,			Failed,		}		protected readonly BundleInfo _bundleInfo;		protected ESteps _steps = ESteps.None;		protected int _timeout;		protected int _failedTryAgain;		protected int _requestCount;		protected string _requestURL;		protected string _lastError = string.Empty;		protected long _lastCode = 0;		protected float _downloadProgress = 0f;		protected ulong _downloadedBytes = 0;		/// <summary>		/// 是否等待异步结束		/// 警告:只能用于解压APP内部资源		/// </summary>		public bool WaitForAsyncComplete = false;		/// <summary>		/// 下载进度(0f~1f)		/// </summary>		public float DownloadProgress		{			get { return _downloadProgress; }		}		/// <summary>		/// 已经下载的总字节数		/// </summary>		public ulong DownloadedBytes		{			get { return _downloadedBytes; }		}		public DownloaderBase(BundleInfo bundleInfo)		{			_bundleInfo = bundleInfo;		}		public void SendRequest(int failedTryAgain, int timeout)		{			if (_steps == ESteps.None)			{				_failedTryAgain = failedTryAgain;				_timeout = timeout;				_steps = ESteps.CheckTempFile;			}		}		public abstract void Update();		public abstract void Abort();		/// <summary>		/// 获取网络请求地址		/// </summary>		protected string GetRequestURL()		{			// 轮流返回请求地址			_requestCount++;			if (_requestCount % 2 == 0)				return _bundleInfo.RemoteFallbackURL;			else				return _bundleInfo.RemoteMainURL;		}		/// <summary>		/// 获取资源包信息		/// </summary>		public BundleInfo GetBundleInfo()		{			return _bundleInfo;		}		/// <summary>		/// 检测下载器是否已经完成(无论成功或失败)		/// </summary>		public bool IsDone()		{			return _steps == ESteps.Succeed || _steps == ESteps.Failed;		}		/// <summary>		/// 下载过程是否发生错误		/// </summary>		public bool HasError()		{			return _steps == ESteps.Failed;		}		/// <summary>		/// 按照错误级别打印错误		/// </summary>		public void ReportError()		{			YooLogger.Error(GetLastError());		}		/// <summary>		/// 按照警告级别打印错误		/// </summary>		public void ReportWarning()		{			YooLogger.Warning(GetLastError());		}		/// <summary>		/// 获取最近发生的错误信息		/// </summary>		public string GetLastError()		{			return $"Failed to download : {_requestURL} Error : {_lastError} Code : {_lastCode}";		}	}}
 |