123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using System.Threading.Tasks;
- using UnityEngine;
- using UnityEngine.Networking;
- namespace WS
- {
- [ObjectSystem]
- public class RequestAsyncUpdate : UpdateSystem<RequestAsync>
- {
- public override void Update(RequestAsync self)
- {
- self.Update();
- }
- }
- ///<summary>Web请求代理</summary>
- public class RequestAsync : WSComponent
- {
- ///<summary>HTTP请求</summary>
- public UnityWebRequest Request;
- ///<summary>取消</summary>
- public bool isCancel;
- ///<summary>异步</summary>
- private TaskCompletionSource<bool> tcs;
- public override void Dispose()
- {
- base.Dispose();
- Request?.Dispose();
- Request = null;
- isCancel = false;
- tcs = null;
- }
- ///<summary>进度</summary>
- public float Progress
- {
- get
- {
- if (Request == null)
- return 0;
- return Request.downloadProgress;
- }
- }
- ///<summary>请求的字节数</summary>
- public ulong ByteDownloaded
- {
- get
- {
- if (Request == null)
- return 0;
- return Request.downloadedBytes;
- }
- }
- public void Update()
- {
- if (isCancel)
- {
- tcs.SetResult(false);
- return;
- }
- if (!Request.isDone)
- {
- return;
- }
- if (!string.IsNullOrEmpty(Request.error))
- {
- tcs.SetResult(true);
- return;
- }
- tcs.SetResult(true);
- }
- /// <summary>Get请求</summary>
- public Task<bool> GetAsync(string url, params string[] header)
- {
- tcs = new TaskCompletionSource<bool>();
- Request = UnityWebRequest.Get(url);
- Request.timeout = RequestComponent.OutTime;
- RequestComponent.Instance.SetHeader(header, Request);
- Request.SendWebRequest();
- return tcs.Task;
- }
- ///<summary>Post请求</summary>
- public Task<bool> PostAsync(string url, string json, params string[] header)
- {
- tcs = new TaskCompletionSource<bool>();
- byte[] postBytes = System.Text.Encoding.Default.GetBytes(json);
- Request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
- Request.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
- Request.SetRequestHeader("Content-Type", "application/json");
- Request.timeout = RequestComponent.OutTime;
- RequestComponent.Instance.SetHeader(header, Request);
- Request.SendWebRequest();
- return tcs.Task;
- }
- ///<summary>Post请求</summary>
- public Task<bool> PostAsync(string url, WWWForm form, params string[] header)
- {
- tcs = new TaskCompletionSource<bool>();
- Request = UnityWebRequest.Post(url, form);
- Request.timeout = RequestComponent.OutTime;
- RequestComponent.Instance.SetHeader(header, Request);
- Request.SendWebRequest();
- return tcs.Task;
- }
- }
- }
|