225 lines
7.7 KiB
C#
225 lines
7.7 KiB
C#
|
|
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
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|