Example #1
0
        private void MakeRequestViaWebRequest(string url, string data, string authType, string authKey, Action <string, PlayFabError> callback)
        {
            byte[] payload = System.Text.Encoding.UTF8.GetBytes(data);
            //TODO: make closure it's own method.
            Thread workerThread = new Thread(() =>
            {
                HttpWebRequest request   = null;
                HttpWebResponse response = null;
                try
                {
                    request = (HttpWebRequest)WebRequest.Create(url);
                    //Prevents hitting a proxy is no proxy is available.
                    request.Proxy = null;                                  //TODO: Add support for proxy's.
                    request.Headers.Add("X-ReportErrorAsSuccess", "true"); // Without this, we have to catch WebException instead, and manually decode the result
                    request.Headers.Add("X-PlayFabSDK", PlayFabVersion.getVersionString());
                    if (authType != null)
                    {
                        request.Headers.Add(authType, authKey);
                    }
                    request.ContentType = "application/json";
                    request.Method      = "POST";
                    request.KeepAlive   = PlayFabSettings.RequestKeepAlive;
                    request.Timeout     = PlayFabSettings.RequestTimeout;

                    //Get Request Stream and send data in the body.
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(payload, 0, payload.Length);
                    }

                    response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (var stream = new System.IO.StreamReader(response.GetResponseStream()))
                        {
                            var result = stream.ReadToEnd();
                            //Lock for protection of simultaneous API calls.
                            lock (_RunOnMainThreadQueue)
                            {
                                var cbc = new CallBackContainer()
                                {
                                    action = callback, result = result, error = null
                                };
                                _RunOnMainThreadQueue.Enqueue(cbc);
                            }
                        }
                    }
                    else
                    {
                        var error = GeneratePfError(response.StatusCode, PlayFabErrorCode.ServiceUnavailable, "Failed to connect to PlayFab server", null);
                        //Lock for protection of simultaneous API calls.
                        lock (_RunOnMainThreadQueue)
                        {
                            var cbc = new CallBackContainer()
                            {
                                action = callback, result = null, error = error
                            };
                            _RunOnMainThreadQueue.Enqueue(cbc);
                        }
                    }
                }
                catch (WebException e)
                {
                    HttpStatusCode httpCode = response == null ? HttpStatusCode.ServiceUnavailable : response.StatusCode;
                    var error = GeneratePfError(httpCode, PlayFabErrorCode.ServiceUnavailable, e.ToString(), null);
                    //Lock for protection of simultaneous API calls.
                    lock (_RunOnMainThreadQueue)
                    {
                        var cbc = new CallBackContainer()
                        {
                            action = callback, result = null, error = error
                        };
                        _RunOnMainThreadQueue.Enqueue(cbc);
                    }
                }
                catch (Exception e)
                {
                    Debug.LogException(e); // If it's an unexpected exception, we should log it noisily

                    HttpStatusCode httpCode = response == null ? HttpStatusCode.ServiceUnavailable : response.StatusCode;
                    var error = GeneratePfError(httpCode, PlayFabErrorCode.ServiceUnavailable, e.ToString(), null);
                    //Lock for protection of simultaneous API calls.
                    lock (_RunOnMainThreadQueue)
                    {
                        var cbc = new CallBackContainer()
                        {
                            action = callback, result = null, error = error
                        };
                        _RunOnMainThreadQueue.Enqueue(cbc);
                    }
                }
                pendingMessages -= 1;
            });

            workerThread.Start();
        }
        private void MakeRequestViaWebRequest(string url, string data, string authType, string authKey, Action <string, string> callback)
        {
            byte[] payload = System.Text.Encoding.UTF8.GetBytes(data);
            //TODO: make closure it's own method.
            Thread workerThread = new Thread(() => {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    //Prevents hitting a proxy is no proxy is available.
                    request.Proxy = null; //TODO: Add support for proxy's.
                    request.Headers.Add("X-ReportErrorAsSuccess", "true");
                    request.Headers.Add("X-PlayFabSDK", PlayFabVersion.getVersionString());
                    if (authType != null)
                    {
                        request.Headers.Add(authType, authKey);
                    }
                    request.ContentType = "application/json";
                    request.Method      = "POST";
                    request.KeepAlive   = PlayFabSettings.RequestKeepAlive;
                    request.Timeout     = PlayFabSettings.RequestTimeout;

                    //Get Request Stream and send data in the body.
                    using (var stream = request.GetRequestStream())
                    {
                        stream.Write(payload, 0, payload.Length);
                    }

                    //Debug.LogFormat("Response Code: {0}", response.StatusCode);
                    var response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (var stream = new System.IO.StreamReader(response.GetResponseStream()))
                        {
                            var result = stream.ReadToEnd();
                            //Lock for protection of simuiltanious API calls.
                            lock (_RunOnMainThreadQueue)
                            {
                                var cbc = new CallBackContainer()
                                {
                                    action = callback, result = result, error = null
                                };
                                _RunOnMainThreadQueue.Enqueue(cbc);
                            }
                        }
                    }
                    else
                    {
                        var error       = GetResonseCodeResult(response.StatusCode);
                        var errorString = GenerateJsonError((int)response.StatusCode, error, 1123, error, error);
                        //Lock for protection of simuiltanious API calls.
                        lock (_RunOnMainThreadQueue)
                        {
                            var cbc = new CallBackContainer()
                            {
                                action = callback, result = errorString, error = null
                            };
                            _RunOnMainThreadQueue.Enqueue(cbc);
                        }
                    }
                }
                catch (Exception e)
                {
                    Debug.Log(e.Message);
                    Debug.Log(e.StackTrace);
                    var errorString = GenerateJsonError(500, e.Message, 1123, e.Message, e.Message);
                    //Lock for protection of simuiltanious API calls.
                    lock (_RunOnMainThreadQueue)
                    {
                        var cbc = new CallBackContainer()
                        {
                            action = callback, result = errorString, error = null
                        };
                        _RunOnMainThreadQueue.Enqueue(cbc);
                    }
                }
            });

            workerThread.Start();
        }