176 lines
5.1 KiB
C#
176 lines
5.1 KiB
C#
|
using System;
|
|||
|
using System.Net.Http;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Abi.Newtonsoft.Json;
|
|||
|
using Abi.Newtonsoft.Json.Linq;
|
|||
|
using UnityEngine;
|
|||
|
using Object = System.Object;
|
|||
|
|
|||
|
public static class APIConnection
|
|||
|
{
|
|||
|
public static string APIAddress = "https://api.abinteractive.net";
|
|||
|
public static string APIVersion = "2";
|
|||
|
private static string _apiUserAgent = "ChilloutVR API-Requests";
|
|||
|
|
|||
|
private static HttpClient _client = new HttpClient();
|
|||
|
|
|||
|
private static string _username;
|
|||
|
private static string _accessKey;
|
|||
|
|
|||
|
private static bool _initialized = false;
|
|||
|
public static bool Initialized
|
|||
|
{
|
|||
|
get => _initialized;
|
|||
|
}
|
|||
|
|
|||
|
public static void Initialize(string username, string accessKey)
|
|||
|
{
|
|||
|
if (username == "" || accessKey == "") return;
|
|||
|
|
|||
|
_username = username;
|
|||
|
_accessKey = accessKey;
|
|||
|
|
|||
|
_client.DefaultRequestHeaders.Clear();
|
|||
|
|
|||
|
_client.DefaultRequestHeaders.Add("Username", _username);
|
|||
|
_client.DefaultRequestHeaders.Add("AccessKey", _accessKey);
|
|||
|
_client.DefaultRequestHeaders.Add("User-Agent", _apiUserAgent);
|
|||
|
|
|||
|
_client.Timeout = TimeSpan.FromSeconds(30);
|
|||
|
_initialized = true;
|
|||
|
}
|
|||
|
|
|||
|
public static async Task<BaseResponse<T>> MakeRequest<T>(string url, Object data = null, string apiVersion = null, bool put = false)
|
|||
|
{
|
|||
|
if (!_initialized) return default(BaseResponse<T>);
|
|||
|
|
|||
|
JObject currentRequestData;
|
|||
|
string currentRequestUrl = String.Empty;
|
|||
|
int currentRequestType = 0;
|
|||
|
|
|||
|
if (apiVersion == null) apiVersion = APIVersion;
|
|||
|
|
|||
|
currentRequestUrl = $"{APIAddress}/{apiVersion}/{url}";
|
|||
|
|
|||
|
HttpResponseMessage response;
|
|||
|
if (data != null) currentRequestType = 1;
|
|||
|
if (put) currentRequestType = 2;
|
|||
|
|
|||
|
if (currentRequestType == 0)
|
|||
|
{
|
|||
|
response = await _client.GetAsync(currentRequestUrl);
|
|||
|
}
|
|||
|
else if (currentRequestType == 2)
|
|||
|
{
|
|||
|
response = await _client.PutAsync(currentRequestUrl, null);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
response = await _client.PostAsync(currentRequestUrl, new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (response.IsSuccessStatusCode)
|
|||
|
{
|
|||
|
return JsonConvert.DeserializeObject<BaseResponse<T>>(await response.Content.ReadAsStringAsync());
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Debug.LogError($"Result from API Request {currentRequestUrl} returned {response.StatusCode}");
|
|||
|
}
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
BaseResponse<T> res = JsonConvert.DeserializeObject<BaseResponse<T>>(await response.Content.ReadAsStringAsync());
|
|||
|
if (res != null)
|
|||
|
return res;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Debug.LogError($"Result from API Request {currentRequestUrl} could not be parsed");
|
|||
|
}
|
|||
|
|
|||
|
return default(BaseResponse<T>);
|
|||
|
}
|
|||
|
|
|||
|
//Responses
|
|||
|
public class BaseResponse<T>
|
|||
|
{
|
|||
|
public string Message { get; set; }
|
|||
|
public T Data { get; set; }
|
|||
|
|
|||
|
public BaseResponse(string message = null, T data = default)
|
|||
|
{
|
|||
|
Message = message;
|
|||
|
Data = data;
|
|||
|
}
|
|||
|
|
|||
|
public override string ToString()
|
|||
|
{
|
|||
|
return JsonConvert.SerializeObject(this);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class UserinfoResponse
|
|||
|
{
|
|||
|
public bool IsAccountUnlocked { get; set; }
|
|||
|
public string UserId { get; set; }
|
|||
|
public string Name { get; set; }
|
|||
|
public string UserRank { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public enum ContentTypes
|
|||
|
{
|
|||
|
Avatar,
|
|||
|
World,
|
|||
|
Spawnable
|
|||
|
}
|
|||
|
|
|||
|
public class GenerateResponse
|
|||
|
{
|
|||
|
public Guid Id { get; set; }
|
|||
|
public ContentTypes Type { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public class ContentInfoResponse
|
|||
|
{
|
|||
|
public string UploadLocation { get; set; }
|
|||
|
public ContentDataIni ContentData { get; set; }
|
|||
|
|
|||
|
public class ContentDataIni : GenericINI
|
|||
|
{
|
|||
|
public ContentTypes Type { get; set; }
|
|||
|
public UgcTagsData Tags { get; set; }
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class GenericINI
|
|||
|
{
|
|||
|
public string Id { get; set; }
|
|||
|
public string Name { get; set; }
|
|||
|
public string Description { get; set; }
|
|||
|
public Uri Image { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public struct UgcTagsData
|
|||
|
{
|
|||
|
public bool Gore;
|
|||
|
public bool Horror;
|
|||
|
public bool Jumpscare;
|
|||
|
public bool Nudity;
|
|||
|
public bool Suggestive;
|
|||
|
public bool Violence;
|
|||
|
public bool ContainsMusic;
|
|||
|
public bool ExtremelyBright;
|
|||
|
public bool ExtremelyHuge;
|
|||
|
public bool ExtremelySmall;
|
|||
|
public bool FlashingColors;
|
|||
|
public bool FlashingLights;
|
|||
|
public bool LoudAudio;
|
|||
|
public bool ParticleSystems;
|
|||
|
public bool ScreenEffects;
|
|||
|
public bool SpawnAudio;
|
|||
|
public bool LongRangeAudio;
|
|||
|
}
|
|||
|
}
|