コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        public void MakeApiCall(HttpRequestContainer request)
        {
            request.status = EHttpRequestStatus.Idle;

            lock (ActiveRequests)
            {
                ActiveRequests.Insert(0, request);
            }

            ActivateThreadWorker();
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
                    }
                });
            }
        }
コード例 #6
0
        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);
            }
        }