using System; using System.Collections; using System.Collections.Generic; using UnityEngine.Networking; namespace YooAsset { /// /// 下载器 /// 说明:UnityWebRequest(UWR) supports reading streaming assets since 2017.1 /// internal class UnityWebDataRequester { private UnityWebRequest _webRequest; private UnityWebRequestAsyncOperation _operationHandle; /// /// 请求URL地址 /// public string URL { private set; get; } /// /// 发送GET请求 /// /// 超时:从请求开始计时 public void SendRequest(string url, int timeout = 0) { if (_webRequest == null) { URL = url; _webRequest = DownloadSystem.NewRequest(URL); DownloadHandlerBuffer handler = new DownloadHandlerBuffer(); _webRequest.downloadHandler = handler; _webRequest.disposeDownloadHandlerOnDispose = true; _webRequest.timeout = timeout; _operationHandle = _webRequest.SendWebRequest(); } } /// /// 获取下载的字节数据 /// public byte[] GetData() { if (_webRequest != null && IsDone()) return _webRequest.downloadHandler.data; else return null; } /// /// 获取下载的文本数据 /// public string GetText() { if (_webRequest != null && IsDone()) return _webRequest.downloadHandler.text; else return null; } /// /// 释放下载器 /// public void Dispose() { if (_webRequest != null) { _webRequest.Dispose(); _webRequest = null; _operationHandle = null; } } /// /// 是否完毕(无论成功失败) /// public bool IsDone() { if (_operationHandle == null) return false; return _operationHandle.isDone; } /// /// 下载进度 /// public float Progress() { if (_operationHandle == null) return 0; return _operationHandle.progress; } /// /// 下载是否发生错误 /// 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 } /// /// 获取错误信息 /// public string GetError() { if (_webRequest != null) { return $"URL : {URL} Error : {_webRequest.error}"; } return string.Empty; } } }