using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using LitJson;
using System.IO;
///
/// 接口及接口访问
///
public static class InterfaceManager
{
private static string _IP = "172.16.1.144:8080";
public static string IP
{
get { return _IP; }
set
{
if (_IP != value)
_IP = value;
}
}
public static string IpAddress { get => string.Format("http://{0}", IP); }
#region 接口
public static string Url_ { get => IpAddress + "/"; }
#endregion
///
/// 读取数据
///
/// 类型
///
///
public static T LoadData(string fileName, JsonType type = JsonType.LitJson) where T : new()
{
//路径
string path = Application.streamingAssetsPath + "/" + fileName + ".json";
Debug.Log(path);
if (!File.Exists(path))
{
path = Application.persistentDataPath + "/" + fileName + ".json";
}
if (!File.Exists(path))
{
return new T();
}
string jsonStr = File.ReadAllText(path);
T data = new T();
switch (type)
{
case JsonType.LitJson:
data = JsonMapper.ToObject(jsonStr);
break;
case JsonType.JsonUtility:
data = JsonUtility.FromJson(jsonStr);
break;
}
return data;
}
public static string GetLocalTxt(string path)
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(path)) { return reader.ReadToEnd(); }
}
public static IEnumerator GetBytes(string url, Action callback)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.data);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator GetString(string url, Action callback)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
Debug.LogError("UnityWebRequest.Result.InProgress");
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
Debug.LogError("UnityWebRequest.Result.ConnectionError");
break;
case UnityWebRequest.Result.ProtocolError:
Debug.LogError("UnityWebRequest.Result.ProtocolError");
break;
case UnityWebRequest.Result.DataProcessingError:
Debug.LogError("UnityWebRequest.Result.DataProcessingError");
break;
default:
break;
}
}
}
public static IEnumerator GetString(string url, int time, Action callback)
{
while (true)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return new WaitForSeconds(time); // 每隔 time 秒调用一次接口
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
}
public static IEnumerator GetString(string url, int time, Dictionary header, Action callback)
{
while (true)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return new WaitForSeconds(time); // 每隔 time 秒调用一次接口
foreach (var item in header)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
}
public static IEnumerator GetJsonString(string url, Action callback = null, string success_code = "200")
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
var Jobject = JObject.Parse(www.downloadHandler.text);
if (Jobject["code"].ToString() == success_code)
{
callback?.Invoke(JsonConvert.DeserializeObject(Jobject["data"].ToString()));
}
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator GetJsonString(string url, Dictionary header, Action callback = null, string success_code = "200")
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
foreach (var item in header)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
//Debug.Log("根据标识返回人员信息...:" + www.downloadHandler.text);
var Jobject = JObject.Parse(www.downloadHandler.text);
if (Jobject["code"].ToString() == success_code)
{
callback?.Invoke(JsonConvert.DeserializeObject(Jobject["data"].ToString()));
}
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator PostJsonString(string url, Action callback = null, string success_code = "200")
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
var Jobject = JObject.Parse(www.downloadHandler.text);
if (Jobject["code"].ToString() == success_code)
{
callback?.Invoke(JsonConvert.DeserializeObject(Jobject["data"].ToString()));
}
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator PostJsonString(string url, WWWForm formdata, Dictionary headers = null, Action callback = null, string success_code = "200")
{
using (UnityWebRequest www = UnityWebRequest.Post(url, formdata))
{
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
var Jobject = JObject.Parse(www.downloadHandler.text);
if (Jobject["code"].ToString() == success_code)
{
callback?.Invoke(JsonConvert.DeserializeObject(Jobject["data"].ToString()));
}
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator PostString(string url, WWWForm formdata, Dictionary headers = null, Action callback = null)
{
using (UnityWebRequest www = UnityWebRequest.Post(url, formdata))
{
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
Debug.Log(www.result);
break;
case UnityWebRequest.Result.ProtocolError:
Debug.Log(www.result);
break;
case UnityWebRequest.Result.DataProcessingError:
Debug.Log(www.result);
break;
default:
break;
}
}
}
public static IEnumerator PostString(string url, WWWForm formdata, Dictionary headers = null, string jsonBody = null, Action callback = null)
{
using (UnityWebRequest www = UnityWebRequest.Post(url, formdata))
{
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
}
byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonBody);
www.uploadHandler = new UploadHandlerRaw(jsonToSend);
// 设置 Content-Type 为 application/json
www.SetRequestHeader("Content-Type", "application/json");
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
Debug.Log(www.result);
break;
case UnityWebRequest.Result.ProtocolError:
Debug.Log(www.result);
break;
case UnityWebRequest.Result.DataProcessingError:
Debug.Log(www.result);
break;
default:
break;
}
}
}
public static IEnumerator GetString(string url, Dictionary headers = null, int time = 50, Action callback = null)
{
while (true)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return new WaitForSeconds(time); // 每隔 time 秒调用一次接口
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
}
public static IEnumerator GetString(string url, Dictionary headers = null, Action callback = null)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
}
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
public static IEnumerator GetString(string url, Dictionary headers = null, string jsonBody = null, Action callback = null)
{
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
foreach (var item in headers)
{
www.SetRequestHeader(item.Key, item.Value);
} // 将请求体设置为原始JSON数据
byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonBody);
www.uploadHandler = new UploadHandlerRaw(jsonToSend);
yield return www.SendWebRequest();
switch (www.result)
{
case UnityWebRequest.Result.InProgress:
break;
case UnityWebRequest.Result.Success:
callback?.Invoke(www.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.ProtocolError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
default:
break;
}
}
}
///
/// UnityWebRequest Post 表单请求
///
/// 接口地址
/// form字典
/// text回调
///
public static IEnumerator UnityWebRequestPost(string url, Dictionary fromDic, Action textCallBack)
{
WWWForm form = new WWWForm();
foreach (var item in fromDic)
{
form.AddField(item.Key, item.Value);
}
UnityWebRequest request = UnityWebRequest.Post(url, form);
request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
yield return request.SendWebRequest();
switch (request.result)
{
case UnityWebRequest.Result.Success:
textCallBack?.Invoke(request.downloadHandler.text);
break;
case UnityWebRequest.Result.ConnectionError:
Debug.LogError("ConnectionError");
break;
case UnityWebRequest.Result.DataProcessingError:
Debug.LogError("DataProcessingError");
break;
case UnityWebRequest.Result.ProtocolError:
Debug.LogError("ProtocolError");
break;
case UnityWebRequest.Result.InProgress:
break;
default:
break;
}
}
}