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"; 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; } } }