DCS/ruiyiweiUX/Assets/GeneralTools/Scripts/Always/WebRequestManager.cs

225 lines
7.7 KiB
C#
Raw Normal View History

2026-06-09 13:59:11 +08:00
using System;
using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
namespace GeneralTools
{
public class WebRequestManager : SingletonBaseAttribute<WebRequestManager>
{
#if UNITY_2017_1_OR_NEWER
public void Get(string url, Action<UnityWebRequest> actionResult)
{
StartCoroutine(_Get(url, actionResult));
}
public void DownloadFile(string url, string downloadFilePathAndName, Action<UnityWebRequest> actionResult)
{
StartCoroutine(_DownloadFile(url, downloadFilePathAndName, actionResult));
}
public void GetTexture(string url, Action<Texture2D, string> actionResult)
{
StartCoroutine(_GetTexture(url, actionResult));
}
public void GetAssetBundle(string url, Action<AssetBundle, string> actionResult)
{
StartCoroutine(_GetAssetBundle(url, actionResult));
}
public void GetAudioClip(string url, Action<AudioClip, string> actionResult, AudioType audioType = AudioType.WAV)
{
StartCoroutine(_GetAudioClip(url, actionResult, audioType));
}
public void Post(string serverURL, WWWForm wWWForm, Action<UnityWebRequest> actionResult)
{
StartCoroutine(_Post(serverURL, wWWForm, actionResult));
}
/// <summary>
/// ͨ<><CDA8>PUT<55><54>ʽ<EFBFBD><CABD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="contentBytes"><3E><>Ҫ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD></param>
/// <param name="resultAction"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>ί<EFBFBD><CEAF></param>
/// <returns></returns>
public void UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult)
{
StartCoroutine(_UploadByPut(url, contentBytes, actionResult, ""));
}
/// <summary>
/// GET<45><54><EFBFBD><EFBFBD>
/// </summary>
/// <param name="action"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ί<EFBFBD><CEAF></param>
/// <returns></returns>
IEnumerator _Get(string url, Action<UnityWebRequest> actionResult)
{
using (UnityWebRequest uwr = UnityWebRequest.Get(url))
{
yield return uwr.SendWebRequest();
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
}
else
{
actionResult?.Invoke(uwr);
}
}
}
/// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
UnityWebRequest uwr;
IEnumerator _DownloadFile(string url, string downloadFilePathAndName, Action<UnityWebRequest> actionResult)
{
uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);
uwr.downloadHandler = new DownloadHandlerFile(downloadFilePathAndName);
yield return uwr.SendWebRequest();
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
}
else
{
actionResult?.Invoke(uwr);
}
}
protected void Update()
{
if (uwr != null)
{
Debug.Log(uwr.downloadProgress);
}
}
/// <20><><EFBFBD><EFBFBD>ͼƬ
IEnumerator _GetTexture(string url, Action<Texture2D, string> actionResult)
{
UnityWebRequest uwr = new UnityWebRequest(url);
DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
uwr.downloadHandler = downloadTexture;
yield return uwr.SendWebRequest();
Texture2D t = null;
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
}
else
{
t = downloadTexture.texture;
}
actionResult?.Invoke(t, url);
}
/// <20><><EFBFBD><EFBFBD>AssetBundle
IEnumerator _GetAssetBundle(string url, Action<AssetBundle, string> actionResult)
{
UnityWebRequest www = new UnityWebRequest(url);
DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(www.url, uint.MaxValue);
www.downloadHandler = handler;
yield return www.SendWebRequest();
AssetBundle bundle = null;
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (www.isNetworkError || www.isHttpError)
#else
if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(www.error);
}
else
{
bundle = handler.assetBundle;
}
actionResult?.Invoke(bundle, url);
}
//<2F><>Ч
IEnumerator _GetAudioClip(string url, Action<AudioClip, string> actionResult, AudioType audioType = AudioType.WAV)
{
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, audioType))
{
yield return uwr.SendWebRequest();
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
}
else
{
actionResult?.Invoke(DownloadHandlerAudioClip.GetContent(uwr), url);
}
}
}
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ύpost<73><74><EFBFBD><EFBFBD>
IEnumerator _Post(string serverURL, WWWForm wWWForm, Action<UnityWebRequest> actionResult)
{
UnityWebRequest uwr = UnityWebRequest.Post(serverURL, wWWForm);
yield return uwr.SendWebRequest();
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
}
else
{
actionResult?.Invoke(uwr);
}
}
/// <summary>
/// ͨ<><CDA8>PUT<55><54>ʽ<EFBFBD><CABD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="contentBytes"><3E><>Ҫ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD></param>
/// <param name="resultAction"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>ί<EFBFBD><CEAF></param>
/// <param name="resultAction"><3E><><EFBFBD><EFBFBD>header<65>ļ<EFBFBD><C4BC>е<EFBFBD>Content-Type<70><65><EFBFBD><EFBFBD></param>
/// <returns></returns>
IEnumerator _UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult, string contentType = "application/octet-stream")
{
UnityWebRequest uwr = new UnityWebRequest();
UploadHandler uploader = new UploadHandlerRaw(contentBytes);
uploader.contentType = contentType;
uwr.uploadHandler = uploader;
yield return uwr.SendWebRequest();
bool res = true;
#if UNITY_2019 || UNITY_2018||UNITY_2017
if (uwr.isNetworkError || uwr.isHttpError)
#else
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
#endif
{
Debug.LogError(uwr.error);
res = false;
}
actionResult?.Invoke(res);
}
#endif
}
}