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