Esempio n. 1
0
        // Generic method to send your request to server through POST method.
        internal static IEnumerator UnityWebRequestInPostMethod <T>(string url, Dictionary <string, string> payLoadKeyValuePairs, Action <T> successResponse = null, Action <string, string> errorResponse = null, bool shouldPrintResponseString = true) where T : ResponseData
        {
            recall : UnityWebRequest unityWebRequest;
            var bodyJsonString = JsonConvert.SerializeObject(payLoadKeyValuePairs);

            unityWebRequest                 = UnityWebRequest.Post(url, bodyJsonString);
            unityWebRequest.method          = UnityWebRequest.kHttpVerbPOST;
            unityWebRequest.downloadHandler = new DownloadHandlerBuffer();
            unityWebRequest.uploadHandler   = new UploadHandlerRaw(Encoding.UTF8.GetBytes(bodyJsonString));
            unityWebRequest.SetRequestHeader("Content-Type", "application/json");

            yield return(unityWebRequest.SendWebRequest());

            try
            {
                if (unityWebRequest.isNetworkError)
                {
                    if (errorResponse != null)
                    {
                        errorResponse.Invoke(url, unityWebRequest.error);
                    }
                    else
                    {
                        Debug.LogError($"<Color=red>Url : {url} \n Error : {unityWebRequest.error}</Color>");
                    }
                    unityWebRequest.Dispose();
                }
                else
                {
                    if (shouldPrintResponseString)
                    {
                        Debug.Log($"<Color=blue>Url : {url} \n Response : {unityWebRequest.downloadHandler.text}</Color>");
                    }

                    RESTApiResponse <T> response = JsonUtility.FromJson <RESTApiResponse <T> >(unityWebRequest.downloadHandler.text);
                    if (response != null)
                    {
                        if (response.responseCode == 200)
                        {
                            successResponse?.Invoke(response.responseData);
                        }
                        else
                        {
                            if (errorResponse != null)
                            {
                                errorResponse.Invoke(url, $"Response: Error Occurred! \n ResponseCode: {response.responseCode} \n ResponseMessage : {response.responseMessage}");
                            }
                            else
                            {
                                Debug.LogError($"<Color=red>Url : {url} \n Response : Error Occurred! \n ResponseCode : {response.responseCode} \n ResponseMessage : {response.responseMessage}</Color>");
                            }
                        }
                        unityWebRequest.Dispose();
                    }
                    else
                    {
                        Debug.LogError($"Null Response!! \n Url : {url} \n Request : {bodyJsonString} \n Response : {unityWebRequest.downloadHandler.text}");
                        Debug.LogError($"Recalling {url} API again");
                        unityWebRequest.Dispose();
                        goto recall;
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogError(e.Message + "\n" + e.StackTrace);
                Debug.LogError($"Url : {url} \n Response : {unityWebRequest.downloadHandler.text}");
            }
        }
Esempio n. 2
0
        // Generic method to send your request to server through GET method.
        internal static IEnumerator UnityWebRequestInGetMethod <T>(string baseUrl, Dictionary <string, string> payLoadKeyValuePairs, Action <T> successResponse = null, Action <string, string> errorResponse = null, bool shouldPrintResponseString = true) where T : ResponseData
        {
            StringBuilder url = new StringBuilder();

            url.Append(baseUrl).Append("?");

            foreach (var val in payLoadKeyValuePairs)
            {
                url.Append(val.Key).Append("=").Append(val.Value).Append("&");
            }
            url.Remove(url.Length - 1, 1);

            recall :  UnityWebRequest unityWebRequest = UnityWebRequest.Get(url.ToString());

            yield return(unityWebRequest.SendWebRequest());

            try
            {
                if (unityWebRequest.isNetworkError)
                {
                    if (errorResponse != null)
                    {
                        errorResponse.Invoke(baseUrl, unityWebRequest.error);
                    }
                    else
                    {
                        Debug.LogError($"<Color=red>Url : {url} \n Error : {unityWebRequest.error}</Color>");
                    }
                    unityWebRequest.Dispose();
                }
                else
                {
                    if (shouldPrintResponseString)
                    {
                        Debug.Log($"<Color=blue>Base Url : {baseUrl} \n Response : {unityWebRequest.downloadHandler.text}</Color>");
                    }

                    RESTApiResponse <T> response = JsonUtility.FromJson <RESTApiResponse <T> >(unityWebRequest.downloadHandler.text);
                    if (response != null)
                    {
                        if (response.responseCode == 200)
                        {
                            successResponse?.Invoke(response.responseData);
                        }
                        else
                        {
                            if (errorResponse != null)
                            {
                                errorResponse.Invoke($"<Color=red>Url : {baseUrl}</Color>", $"<Color=red>Response: Error Occurred! \n ResponseCode: {response.responseCode} \n ResponseMessage : {response.responseMessage}</Color>");
                            }
                            else
                            {
                                Debug.LogError($"<Color=red>Url : {baseUrl} \n Response : Error Occurred! \n ResponseCode : {response.responseCode} \n ResponseMessage : {response.responseMessage}</Color>");
                            }
                        }
                        unityWebRequest.Dispose();
                    }
                    else
                    {
                        Debug.LogError($"Null Response!! \n Url : {url} \n Request : {url} \n Response : {unityWebRequest.downloadHandler.text}");
                        Debug.LogError($"Recalling {url} API again");
                        unityWebRequest.Dispose();
                        goto recall;
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogError(e.Message + "\n" + e.StackTrace);
                Debug.LogError($"Url : {url} \n Response : {unityWebRequest.downloadHandler.text}");
            }
        }