上海虹口龙之梦项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

328 lines
12 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class UnityNetworkManager : MonoBehaviour
{
private static UnityNetworkManager instance;
public static UnityNetworkManager Instance
{
get
{
if (instance == null)
{
GameObject NetworkManager = new GameObject("UnityNetworkManager");
instance = NetworkManager.AddComponent<UnityNetworkManager>();
}
return instance;
}
}
/**
UnityWebRequest uwr = new UnityWebRequest();
uwr.url = "http://www.mysite.com";
uwr.method = UnityWebRequest.kHttpVerbGET; // can be set to any custom method, common constants privided
uwr.useHttpContinue = false;
uwr.chunkedTransfer = false;
uwr.redirectLimit = 0; // disable redirects
uwr.timeout = 60; // don't make this small, web requests do take some time
**/
/// <summary>
/// GET请求
/// </summary>
/// <param name="url"></param>
/// <param name="action"></param>
public void Get(string url, Action<bool, string> actionResult)
{
StartCoroutine(_Get(url, actionResult));
}
/// <summary>
/// 请求byte数据
/// </summary>
/// <param name="url"></param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的byte数组</param>
/// <returns></returns>
public void GetBytes(string url, Action<bool, string, byte[]> actionResult)
{
StartCoroutine(_GetBytes(url, actionResult));
}
/// <summary>
/// 请求图片
/// </summary>
/// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
/// <returns></returns>
public void GetTexture(string url, Action<bool, string, Texture2D> actionResult)
{
StartCoroutine(_GetTexture(url, actionResult));
}
/// <summary>
/// 请求AssetBundle
/// </summary>
/// <param name="url">AssetBundle地址,like 'http://www.my-server.com/myData.unity3d'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AssetBundle</param>
/// <returns></returns>
public void GetAssetBundle(string url, Action<bool, string, AssetBundle> actionResult)
{
StartCoroutine(_GetAssetBundle(url, actionResult));
}
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有音效地址,like 'http://myserver.com/mysound.wav'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AudioClip</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns>
public void GetAudioClip(string url, Action<bool, string, AudioClip> actionResult, AudioType audioType = AudioType.WAV)
{
StartCoroutine(_GetAudioClip(url, actionResult, audioType));
}
/// <summary>
/// 向服务器提交post请求
/// </summary>
/// <param name="serverURL">服务器请求目标地址,like "http://www.my-server.com/myform"</param>
/// <param name="lstformData">form表单参数</param>
/// <param name="lstformData">处理返回结果的委托,处理请求对象</param>
/// <returns></returns>
public void Post(string serverURL, List<IMultipartFormSection> lstformData, Action<bool, string> actionResult)
{
//List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
//formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
//formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
StartCoroutine(_Post(serverURL, lstformData, actionResult));
}
/// <summary>
/// 通过PUT方式将字节流传到服务器
/// </summary>
/// <param name="url">服务器目标地址 like 'http://www.my-server.com/upload' </param>
/// <param name="contentBytes">需要上传的字节流</param>
/// <param name="resultAction">处理返回结果的委托</param>
/// <returns></returns>
public void UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult)
{
StartCoroutine(_UploadByPut(url, contentBytes, actionResult, ""));
}
/// <summary>
/// GET请求
/// </summary>
/// <param name="url">请求地址,like 'http://www.my-server.com/ '</param>
/// <param name="action">请求发起后处理回调结果的委托</param>
/// <returns></returns>
IEnumerator _Get(string url, Action<bool, string> actionResult)
{
using (UnityWebRequest uwr = UnityWebRequest.Get(url))
{
//yield return uwr.SendWebRequest();
yield return uwr.SendWebRequest();
string text = "";
if (!(uwr.isNetworkError || uwr.isHttpError))
{
text = uwr.downloadHandler.text;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke(uwr.isHttpError, text);
}
}
}
/// <summary>
/// 请求图片
/// </summary>
/// <param name="url"></param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的byte数组</param>
/// <returns></returns>
IEnumerator _GetBytes(string url, Action<bool, string, byte[]> actionResult)
{
using (UnityWebRequest uwr = new UnityWebRequest(url))
{
DownloadHandlerFile downloadFile = new DownloadHandlerFile(url);
uwr.downloadHandler = downloadFile;
yield return uwr.SendWebRequest();
byte[] bytes = null;
string text = null;
if (!(uwr.isNetworkError || uwr.isHttpError))
{
bytes = downloadFile.data;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke((uwr.isNetworkError || uwr.isHttpError), text, bytes);
}
}
}
/// <summary>
/// 请求图片
/// </summary>
/// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
/// <returns></returns>
IEnumerator _GetTexture(string url, Action<bool, string, Texture2D> actionResult)
{
using (UnityWebRequest uwr = new UnityWebRequest(url))
{
DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
uwr.downloadHandler = downloadTexture;
yield return uwr.SendWebRequest();
Texture2D texture = null;
string text = null;
if (!(uwr.isNetworkError || uwr.isHttpError))
{
texture = downloadTexture.texture;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke((uwr.isNetworkError || uwr.isHttpError), text, texture);
}
}
}
/// <summary>
/// 请求AssetBundle
/// </summary>
/// <param name="url">AssetBundle地址,like 'http://www.my-server.com/myData.unity3d'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AssetBundle</param>
/// <returns></returns>
IEnumerator _GetAssetBundle(string url, Action<bool, string, AssetBundle> actionResult)
{
using (UnityWebRequest uwr = new UnityWebRequest(url))
{
DownloadHandlerAssetBundle downloadAssetBundle = new DownloadHandlerAssetBundle(uwr.url, uint.MaxValue);
uwr.downloadHandler = downloadAssetBundle;
yield return uwr.SendWebRequest();
AssetBundle assetBundle = null;
string text = null;
if (!(uwr.isNetworkError || uwr.isHttpError))
{
assetBundle = downloadAssetBundle.assetBundle;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke((uwr.isNetworkError || uwr.isHttpError), text, assetBundle);
}
}
}
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有音频地址,like 'http://myserver.com/mymovie.mp3'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的MovieTexture</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns>
IEnumerator _GetAudioClip(string url, Action<bool, string, AudioClip> actionResult, AudioType audioType = AudioType.WAV)
{
using (UnityWebRequest uwr = new UnityWebRequest(url))
{
DownloadHandlerAudioClip downloadAudioClip = new DownloadHandlerAudioClip(url, AudioType.WAV);
uwr.downloadHandler = downloadAudioClip;
yield return uwr.SendWebRequest();
AudioClip audioClip = null;
string text = null;
if (!(uwr.isNetworkError || uwr.isHttpError))
{
audioClip = downloadAudioClip.audioClip;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke((uwr.isNetworkError || uwr.isHttpError), text, audioClip);
}
}
}
/// <summary>
/// 向服务器提交post请求
/// </summary>
/// <param name="url">服务器请求目标地址,like "http://www.my-server.com/myform"</param>
/// <param name="lstformData">form表单参数</param>
/// <param name="lstformData">处理返回结果的委托</param>
/// <returns></returns>
IEnumerator _Post(string url, List<IMultipartFormSection> lstformData, Action<bool, string> actionResult)
{
//List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
//formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
//formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
using (UnityWebRequest uwr = UnityWebRequest.Post(url, lstformData))
{
yield return uwr.SendWebRequest();
string text = "";
if (!(uwr.isNetworkError || uwr.isHttpError))
{
text = uwr.downloadHandler.text;
}
else
{
text = uwr.error;
}
if (actionResult != null)
{
actionResult.Invoke(uwr.isHttpError, text);
}
}
}
/// <summary>
/// 通过PUT方式将字节流传到服务器
/// </summary>
/// <param name="url">服务器目标地址 like 'http://www.my-server.com/upload' </param>
/// <param name="contentBytes">需要上传的字节流</param>
/// <param name="resultAction">处理返回结果的委托</param>
/// <param name="resultAction">设置header文件中的Content-Type属性</param>
/// <returns></returns>
IEnumerator _UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult, string contentType = "application/octet-stream")
{
using (UnityWebRequest uwr = new UnityWebRequest())
{
UploadHandler uploader = new UploadHandlerRaw(contentBytes);
// Sends header: "Content-Type: custom/content-type";
uploader.contentType = contentType;
uwr.uploadHandler = uploader;
yield return uwr.SendWebRequest();
bool res = true;
if (!(uwr.isNetworkError || uwr.isHttpError))
{
res = false;
}
if (actionResult != null)
{
actionResult.Invoke(res);
}
}
}
}