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;
}
}
}