BITKit/Packages/Runtime~/Unity/Scripts/Network/WebProvider.cs

59 lines
2.1 KiB
C#
Raw Normal View History

2023-06-05 19:57:17 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cysharp.Threading.Tasks;
using UnityEngine.Networking;
using System;
using System.Threading;
namespace BITKit.HttpNet
{
[System.Serializable]
public sealed class UnityWebRequest : WebProvider
{
public override async UniTask<string> GetAsync(string url, CancellationToken cancellationToken = default)
{
await UniTask.SwitchToMainThread(cancellationToken);
using (var request = UnityEngine.Networking.UnityWebRequest.Get(url))
{
await request.SendWebRequest();
if (cancellationToken != default)
{
if (cancellationToken.IsCancellationRequested)
{
throw new OperationCanceledException();
}
}
if (request.result is UnityEngine.Networking.UnityWebRequest.Result.Success)
{
return request.downloadHandler.text;
}
else
{
2023-08-23 01:59:26 +08:00
throw new System.Net.Http.HttpRequestException(request.error);
2023-06-05 19:57:17 +08:00
}
}
}
public override async UniTask<string> PostAsync<T>(string url, T value, CancellationToken cancellationToken = default)
{
await UniTask.SwitchToMainThread(cancellationToken);
switch (value)
{
case String _string:
2023-06-29 14:57:11 +08:00
using (var request = UnityEngine.Networking.UnityWebRequest.PostWwwForm(url, _string))
2023-06-05 19:57:17 +08:00
{
await request.SendWebRequest();
return request.downloadHandler.text;
}
case WWWForm _wwwForm:
using (var request = UnityEngine.Networking.UnityWebRequest.Post(url, _wwwForm))
{
await request.SendWebRequest();
return request.downloadHandler.text;
}
default:
throw new NotImplementedException();
}
}
}
}