using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine.Networking;
using System.Text;
using System;
namespace TFramework
{
public class NetHelper
{
private int m_timeOut = 20;
///
/// 请求最大等待时长
///
///
public NetHelper(int timeOut)
{
m_timeOut = timeOut;
}
public NetHelper() { }
public async UniTask Get(string url, params Header[] headers)
{
UnityWebRequest get = UnityWebRequest.Get(url);
foreach (var item in headers)
{
get.SetRequestHeader(item.m_headerKey, item.m_headerValue);
}
get.timeout = m_timeOut;
try
{
await get.SendWebRequest();
}
catch (Exception e)
{
return ErrorCallBack(e.Message);
}
return OverCallBack(get);
}
public async UniTask Post(string url, string json, params Header[] headers)
{
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
request.uploadHandler = new UploadHandlerRaw(Encoding.Default.GetBytes(json));
request.downloadHandler = new DownloadHandlerBuffer();
foreach (var item in headers)
{
request.SetRequestHeader(item.m_headerKey, item.m_headerValue);
}
request.timeout = m_timeOut;
try
{
await request.SendWebRequest();
}catch(Exception e)
{
return ErrorCallBack(e.Message);
}
return OverCallBack(request);
}
}
public async UniTask Post(string url, WWWForm form, params Header[] headers)
{
using (UnityWebRequest request = UnityWebRequest.Post(url, form))
{
foreach (var item in headers)
{
request.SetRequestHeader(item.m_headerKey, item.m_headerValue);
}
request.timeout = m_timeOut;
try
{
await request.SendWebRequest();
}
catch (Exception e)
{
return ErrorCallBack(e.Message);
}
return OverCallBack(request);
}
}
private CallBackArgs OverCallBack(UnityWebRequest request)
{
CallBackArgs m_callBackArgs = new CallBackArgs();
m_callBackArgs.IsError = request.result == UnityWebRequest.Result.ProtocolError
|| request.result == UnityWebRequest.Result.ConnectionError
|| request.result == UnityWebRequest.Result.DataProcessingError || !string.IsNullOrEmpty(request.error);
m_callBackArgs.Error = request.error;
m_callBackArgs.Text = request.downloadHandler.text;
m_callBackArgs.Data = request.downloadHandler.data;
return m_callBackArgs;
}
private CallBackArgs ErrorCallBack(string error)
{
CallBackArgs m_callBackArgs = new CallBackArgs();
m_callBackArgs.IsError = true;
m_callBackArgs.Error = error;
return m_callBackArgs;
}
}
///
/// Web请求回调
///
public class CallBackArgs : EventArgs
{
public bool IsError;
public string Text;
public string Error;
public byte[] Data;
public void Reset()
{
IsError = false;
Text = string.Empty;
Error = string.Empty;
Data = null;
}
}
public struct Header
{
public string m_headerKey;
public string m_headerValue;
public Header(string headerKey, string headerValue)
{
m_headerKey = headerKey;
m_headerValue = headerValue;
}
}
}