Exemplo n.º 1
0
        private void SendRequest(IRequestHandler requestHandler)
        {
            string url = requestHandler.GetUrl();

            if (VERBOSE)
            {
                Debug.Log($"RequestController: Send Request: {url}");
            }

            // NOTE: In this case, as this code is implementing a very specific retries system (including delays), we use our
            //              custom WebRequest system without retries (requestAttemps = 1) and let the current code to apply the retries.
            WebRequestAsyncOperation asyncOp = Environment.i.platform.webRequest.Get(url, requestAttemps: 1, disposeOnCompleted: true);

            asyncOp.completed += operation =>
            {
                UnityWebRequest unityWebRequest  = operation.webRequest;
                bool            shouldTryToRetry = true;
                string          serverResponse   = unityWebRequest.downloadHandler.text;

                if (VERBOSE)
                {
                    Debug.Log($"RequestController: Request completed: success? {unityWebRequest.result == UnityWebRequest.Result.Success} {serverResponse}");
                }

                if (unityWebRequest.result == UnityWebRequest.Result.Success)
                {
                    requestHandler.SetApiResponse(serverResponse,
                                                  () =>
                    {
                        if (VERBOSE)
                        {
                            Debug.Log($"RequestController: Request Succeeded: {url}");
                        }

                        shouldTryToRetry = false;
                    },
                                                  error =>
                    {
                        serverResponse = $"RequestController: Parse Request Error: {url}: {error}";

                        if (VERBOSE)
                        {
                            Debug.Log(serverResponse);
                        }
                    });
                }

                if (shouldTryToRetry)
                {
                    if (requestHandler.CanRetry())
                    {
                        requestHandler.Retry();
                    }
                    else
                    {
                        requestHandler.SetApiResponseError(serverResponse);
                    }
                }

                unityWebRequest.Dispose();
            };
        }