public void MakeApiCall(string apiEndPoint, object args, HttpRequestContainer.ActionSuccessHandler successCallback, HttpRequestContainer.ActionErrorHandler errorCallback, Dictionary <string, string> extraHeaders = null, string method = HttpRequestContainerType.POST, bool allowQueueing = false, bool toJson = true) { HttpRequestContainer request = new HttpRequestContainer() { apiEndPoint = apiEndPoint, Payload = Encoding.UTF8.GetBytes(JsonUtility.ToJson(args)), urlCall = _apiSettings.MakeApiUrl(apiEndPoint), CallbackError = errorCallback, CallbackSuccess = successCallback, Headers = extraHeaders ?? new Dictionary <string, string>(), RequestTimeout = _apiSettings.RequestTimeout, RequestKeepAlive = _apiSettings.RequestKeepAlive, Method = method }; if (allowQueueing && _apiCallQueue != null) { for (var i = _apiCallQueue.Count - 1; i >= 0; i--) { if (_apiCallQueue[i].apiEndPoint == apiEndPoint) { _apiCallQueue.RemoveAt(i); } } _apiCallQueue.Add(request); } else { _internalRequestApi.MakeApiCall(request); } }
private static void ProcessJsonResponse(HttpRequestContainer request) { try { HttpJsonResponse response = new HttpJsonResponse(); response.rawResponse = request.JsonResponse; lock (ResultQueue) { ResultQueue.Enqueue(() => { try { request.CallbackSuccess(response); } catch (Exception e) { Debug.LogException(e); } }); } }catch (Exception e) { string msg = "Unhandled exception in ProcessJsonResponse : " + request.urlCall; request.JsonResponse = request.JsonResponse ?? msg; var enhancedError = new Exception(msg, e); Debug.LogException(enhancedError); QueueRequestError(request); } }
public void MakeApiCall(HttpRequestContainer request) { request.status = EHttpRequestStatus.Idle; lock (ActiveRequests) { ActiveRequests.Insert(0, request); } ActivateThreadWorker(); }
private static void ProcessHttpResponse(HttpRequestContainer request) { Debug.Log("[API] Process Http Response"); try { var httpResponse = (HttpWebResponse)request.HttpRequest.GetResponse(); request.statusCode = System.Convert.ToInt32(httpResponse.StatusCode); if (httpResponse.StatusCode == HttpStatusCode.OK || httpResponse.StatusCode != HttpStatusCode.Created || httpResponse.StatusCode != HttpStatusCode.Accepted || httpResponse.StatusCode != HttpStatusCode.NoContent) { request.JsonResponse = ResponseToString(httpResponse); } if ((httpResponse.StatusCode != HttpStatusCode.OK && httpResponse.StatusCode != HttpStatusCode.Created && httpResponse.StatusCode != HttpStatusCode.Accepted && httpResponse.StatusCode != HttpStatusCode.NoContent)) { request.JsonResponse = request.JsonResponse ?? "No response from server"; QueueRequestError(request); return; } request.status = EHttpRequestStatus.Received; httpResponse.Close(); } catch (Exception e) { var msg = "Unhandled exception in ProcessHttpResponse : " + request.urlCall; var httpResponse = (HttpWebResponse)request.HttpRequest.GetResponse(); if (httpResponse != null) { msg += "\n" + ResponseToString(httpResponse); httpResponse.Close(); } request.JsonResponse = request.JsonResponse ?? msg; var enhancedError = new Exception(msg, e); Debug.LogException(enhancedError); QueueRequestError(request); } }
private static void QueueRequestError(HttpRequestContainer request) { request.status = EHttpRequestStatus.Error; request.Error = new HttpRequestError() { code = request.statusCode, message = request.JsonResponse }; lock (ResultQueue) { ResultQueue.Enqueue(() => { if (request.CallbackError != null) { request.CallbackError(request.Error); } }); } }
private static void Post(HttpRequestContainer request) { Debug.Log("[API] Requisicao executada"); try { request.HttpRequest = (HttpWebRequest)WebRequest.Create(request.urlCall); request.HttpRequest.UserAgent = "UnityEngineClient"; request.HttpRequest.SendChunked = false; request.HttpRequest.Proxy = null; request.HttpRequest.Method = request.Method; request.HttpRequest.KeepAlive = request.RequestKeepAlive; request.HttpRequest.Timeout = request.RequestTimeout; request.HttpRequest.AllowWriteStreamBuffering = false; request.HttpRequest.ReadWriteTimeout = request.RequestTimeout; request.HttpRequest.Proxy = null; request.HttpRequest.AllowAutoRedirect = false; bool noContentType = true; foreach (KeyValuePair <string, string> pair in request.Headers) { if (pair.Key == "ContentType" || pair.Key == "Content-Type") { noContentType = false; request.HttpRequest.ContentType = pair.Value; } else { request.HttpRequest.Headers.Add(pair.Key, pair.Value); } } if (noContentType) { request.HttpRequest.ContentType = "application/json"; } request.HttpRequest.ContentLength = request.Payload.Length; if (request.HttpRequest.Method != HttpRequestContainerType.DELETE && request.HttpRequest.Method != HttpRequestContainerType.GET) { using (Stream stream = request.HttpRequest.GetRequestStream()) { stream.Write(request.Payload, 0, request.Payload.Length); } } else { request.HttpRequest.ContentLength = 0; request.HttpRequest.GetResponse(); } request.status = EHttpRequestStatus.Sent; }catch (WebException e) { request.status = EHttpRequestStatus.Error; Debug.Log(request.urlCall); request.JsonResponse = ResponseToString(e.Response) ?? e.Status.ToString() + ":" + request.urlCall; WebException enhancedError = new WebException(request.JsonResponse, e); Debug.LogException(enhancedError); }catch (Exception e) { request.status = EHttpRequestStatus.Error; request.JsonResponse = "Unhandled exception in Post : " + request.urlCall; var enhancedError = new Exception(request.JsonResponse, e); Debug.LogException(enhancedError); QueueRequestError(request); } }