using Cysharp.Threading.Tasks; using UnityGameFramework.Runtime; namespace SepCore.AsyncTask { /// /// WebRequest 异步扩展方法 /// public static class WebRequestAsyncExtension { /// /// 异步发送Web请求 /// /// WebRequest组件 /// 请求地址 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 请求成功事件 public static UniTask GetWebRequestAsync(this WebRequestComponent webRequestComponent, string webRequestUri, object userData = null, float timeout = 30f) { int serialId = 0; UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync( WebRequestSuccessEventArgs.EventId, WebRequestFailureEventArgs.EventId, successArgs => successArgs.SerialId == serialId, failureArgs => failureArgs.SerialId == serialId, timeout ); serialId = webRequestComponent.AddWebRequest(webRequestUri, userData); return waitTask; } /// /// 异步发送Web请求并获取字节数据 /// /// WebRequest组件 /// 请求地址 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 响应字节数据 public static UniTask GetWebRequestBytesAsync(this WebRequestComponent webRequestComponent, string webRequestUri, object userData = null, float timeout = 30f) { return GetWebRequestAsync(webRequestComponent, webRequestUri, userData, timeout) .ContinueWith(successArgs => successArgs.GetWebResponseBytes()); } /// /// 异步发送Web请求并获取字符串数据 /// /// WebRequest组件 /// 请求地址 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 响应字符串数据 public static UniTask GetWebRequestStringAsync(this WebRequestComponent webRequestComponent, string webRequestUri, object userData = null, float timeout = 30f) { return GetWebRequestBytesAsync(webRequestComponent, webRequestUri, userData, timeout) .ContinueWith(bytes => System.Text.Encoding.UTF8.GetString(bytes)); } /// /// 异步发送POST请求 /// /// WebRequest组件 /// 请求地址 /// POST数据 /// 用户自定义数据 /// 超时时间(秒),0表示不超时 /// 请求成功事件 public static UniTask PostWebRequestAsync(this WebRequestComponent webRequestComponent, string webRequestUri, byte[] postData, object userData = null, float timeout = 30f) { int serialId = 0; UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync( WebRequestSuccessEventArgs.EventId, WebRequestFailureEventArgs.EventId, successArgs => successArgs.SerialId == serialId, failureArgs => failureArgs.SerialId == serialId, timeout ); serialId = webRequestComponent.AddWebRequest(webRequestUri, postData, userData); return waitTask; } } }