Files
BABA_YAGA/Assets/Third Parties/D.A. Assets/DA-Shared/Runtime/Web/RequestSender.cs
2026-05-17 15:12:16 +07:00

142 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
namespace DA_Assets.Networking
{
public class RequestSender
{
public static async Task<Texture2D> LoadImage(string url)
{
using (UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(url))
{
var asyncOp = webRequest.SendWebRequest();
while (!asyncOp.isDone)
{
await Task.Yield();
}
bool isRequestError;
#if UNITY_2020_1_OR_NEWER
isRequestError = webRequest.result != UnityWebRequest.Result.Success;
#else
isRequestError = webRequest.isNetworkError || webRequest.isHttpError;
#endif
if (isRequestError)
{
Debug.LogError($"LoadImage | {webRequest.error}");
return null;
}
else
{
Texture2D texture = DownloadHandlerTexture.GetContent(webRequest);
return texture;
}
}
}
public static async Task<string> Get(string url, int awaitDelayMs = 100)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
{
try
{
#if UNITY_6000_0_OR_NEWER
await webRequest.SendWebRequest();
#else
webRequest.SendWebRequest();
while (!webRequest.isDone)
await Task.Delay(awaitDelayMs);
#endif
}
catch (Exception ex)
{
Debug.LogException(ex);
return null;
}
bool isRequestError;
#if UNITY_2020_1_OR_NEWER
isRequestError = webRequest.result != UnityWebRequest.Result.Success;
#else
isRequestError = webRequest.isNetworkError || webRequest.isHttpError;
#endif
if (isRequestError)
{
Debug.LogError($"RequestSender.Get | {webRequest.error}");
return null;
}
else
{
string result = webRequest.downloadHandler.text;
return result;
}
}
}
public static async Task<string> Post(string url, string postData, string contentType, Dictionary<string, string> headers = null, int awaitDelayMs = 100)
{
using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(postData);
webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw);
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.SetRequestHeader("Content-Type", contentType);
if (headers != null)
{
foreach (var header in headers)
{
webRequest.SetRequestHeader(header.Key, header.Value);
}
}
try
{
#if UNITY_6000_0_OR_NEWER
await webRequest.SendWebRequest();
#else
webRequest.SendWebRequest();
while (!webRequest.isDone)
await Task.Delay(awaitDelayMs);
#endif
}
catch (Exception ex)
{
Debug.LogException(ex);
return null;
}
while (!webRequest.isDone)
await Task.Delay(awaitDelayMs);
bool isRequestError;
#if UNITY_2020_1_OR_NEWER
isRequestError = webRequest.result != UnityWebRequest.Result.Success;
#else
isRequestError = webRequest.isNetworkError || webRequest.isHttpError;
#endif
if (isRequestError)
{
string methodPath = $"{nameof(RequestSender)}.{nameof(Post)}";
Debug.LogError($"{methodPath} | Error: {webRequest.error}");
return null;
}
else
{
string result = webRequest.downloadHandler.text;
return result;
}
}
}
}
}