using UnityEngine; using Newtonsoft.Json; using UnityEngine.Networking; using System.Threading.Tasks; using System.Collections.Generic; using Newtonsoft.Json.Linq; public static class APIRequestHandler { /// /// Method requests given URL and returns as Object of given Type T. /// /// The URL to request. /// T public static async Task GetRequest(string uri) { using UnityWebRequest webRequest = UnityWebRequest.Get(uri); Debug.Log($"Requesting URL {uri}"); webRequest.SendWebRequest(); while(!webRequest.isDone) { if(!Application.isPlaying) { Debug.LogWarning("Request sent while Application is not playing!"); return default; }//if end await Task.Yield(); }//loop end string[] pages = uri.Split('/'); int page = pages.Length - 1; switch (webRequest.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: Debug.LogError(pages[page] + ": Error: " + webRequest.error); break; case UnityWebRequest.Result.ProtocolError: Debug.LogError(pages[page] + ": HTTP Error: " + webRequest.error); break; case UnityWebRequest.Result.Success: T temp = default; Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text); return temp = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); }//switch end return default; }//GetRequest() end /// /// Method requests given URL and returns as a List Objects of given Type T. /// /// The URL to request. /// List public static async Task> GetRequestList(string uri) { using UnityWebRequest webRequest = UnityWebRequest.Get(uri); Debug.Log($"Requesting URL {uri}"); webRequest.SendWebRequest(); while(!webRequest.isDone) { if(!Application.isPlaying) { Debug.LogWarning("Request sent while Application is not playing!"); return null; }//if end await Task.Yield(); }//loop end string[] pages = uri.Split('/'); int page = pages.Length - 1; switch (webRequest.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: Debug.LogError(pages[page] + ": Error: " + webRequest.error); return null; case UnityWebRequest.Result.ProtocolError: Debug.LogError(pages[page] + ": HTTP Error: " + webRequest.error); break; case UnityWebRequest.Result.Success: Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text); // SerializableList dataLoader = JsonUtility.FromJson>(webRequest.downloadHandler.text); SerializableList dataLoader = JsonConvert.DeserializeObject>(webRequest.downloadHandler.text); return dataLoader.list; }//switch end return null; }//GetRequestList() end /// /// Method requests given URL and return downloaded media as Sprite. /// /// The URL to get media from. /// Sprite public static async Task GetMedia(string uri) { Debug.Log($"Requesting URL {uri}"); UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(uri); webRequest.SendWebRequest(); while(!webRequest.isDone) { if(!Application.isPlaying) { Debug.LogWarning("Request sent while Application is not playing!"); return null; }//if end await Task.Yield(); }//loop end switch (webRequest.result) { case UnityWebRequest.Result.ConnectionError: case UnityWebRequest.Result.DataProcessingError: Debug.LogError(": Error: " + webRequest.error); break; case UnityWebRequest.Result.ProtocolError: Debug.LogError(": HTTP Error: " + webRequest.error); break; case UnityWebRequest.Result.Success: Texture2D tex = ((DownloadHandlerTexture)webRequest.downloadHandler).texture; return Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero); }//switch end return null; }//GetMedia() end }//class end