using Mogafa.Common; using Mogafa.Common.HttpClients; using Mogafa.Common.Ioc; using Mogafa.Unity.Common.Networks; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace DidabuCloud.Unity.Core.NetWorking { public class HttpUtility : MogafaBase { private static IHttpClient httpClient; private static IHttpClient defaultHttpClient = new UnityWebRequestHttpClient("", new List(), new HttpRequestOptions()); private static List httpRequestHandlers = new List(); protected static IHttpClient HttpClient { get { if (httpClient != null) { return httpClient; } if (!IocContainer.TryResolve(out httpClient)) { return defaultHttpClient; } foreach (IHttpRequestHandler handler in httpRequestHandlers) { httpClient.AddHttpRequestHandler(handler); } return httpClient; } } public static void SetHeaders(Dictionary headers) { } public static void AddHttpRequestHandler(IHttpRequestHandler httpRequestHandler) { if (httpRequestHandler == null) { return; } if (httpRequestHandlers.FirstOrDefault(h => h.Name == httpRequestHandler.Name) != null) { return; } httpRequestHandlers.Add(httpRequestHandler); HttpClient.AddHttpRequestHandler(httpRequestHandler); } private static DidabuHttpResponse GetResponse(HttpOriginalResponse> originalResponse) where T : new() { if (originalResponse.StatusCode == HttpStatusCodes.OK) { originalResponse.Body.Code = HttpStatusCodes.OK; return originalResponse.Body; } if (originalResponse.Body == null) { originalResponse.Body = new DidabuHttpResponse(); } originalResponse.Body.Code = originalResponse.StatusCode; originalResponse.Body.IsSuccessful = false; originalResponse.Body.Message = originalResponse.StatusMessage; return originalResponse.Body; } public async static Task> Get(string url, Dictionary headers = null) where T : new() { var finalHeaders = headers; if (finalHeaders == null) { finalHeaders = new Dictionary(); } var originalResponse = new HttpOriginalResponse>() { StatusCode = -1 }; try { originalResponse = await HttpClient.Get>(url, finalHeaders); } catch (Exception ex) { originalResponse.StatusMessage = ex.Message; } return GetResponse(originalResponse); } public async static Task> Delete(string url, Dictionary headers = null) where T : new() { var finalHeaders = headers; if (finalHeaders == null) { finalHeaders = new Dictionary(); } var originalResponse = new HttpOriginalResponse>() { StatusCode = -1 }; try { originalResponse = await HttpClient.Delete>(url, finalHeaders); } catch (Exception ex) { originalResponse.StatusMessage = ex.Message; } return GetResponse(originalResponse); } //public async static Task> Put(string url, Dictionary headers = null) //{ // var finalHeaders = headers; // if (finalHeaders == null) // { // finalHeaders = new Dictionary(); // } // var originalResponse = await HttpClient.>(url, finalHeaders); // return GetResponse(originalResponse); //} public async static Task> Post(string url, string data, Dictionary headers = null) where T : new() { var finalHeaders = headers; if (finalHeaders == null) { finalHeaders = new Dictionary(); } var originalResponse = new HttpOriginalResponse>() { StatusCode = -1 }; try { originalResponse = await HttpClient.Post>(url, data, finalHeaders); } catch (Exception ex) { originalResponse.StatusMessage = ex.Message; } return GetResponse(originalResponse); } } }