Example #1
0
 public DisqusApiResponse(ApplicationRateLimit rateLimit, int code, Either <ErrorResponseMessage, T> response)
 {
     RateLimit = rateLimit;
     Code      = code;
     Response  = response;
 }
Example #2
0
        public Either <ErrorResponseMessage, DisqusApiResponse <T> > Request <T>(DisqusRequest <T> request)
        {
            _disqusRequester.AccessToken = _accessToken;
            _disqusRequester.PublicKey   = _publicKey;

            IDisqusResponseMessage result = _disqusRequester.Request(request);

            if (result.ApplicationRateLimit.IsNone)
            {
                return(Left <ErrorResponseMessage, DisqusApiResponse <T> >(new ErrorResponseMessage(result.Body)));
            }

            DisqusApiResponse <T> apiResponse;

            int code = -1;

            ApplicationRateLimit rateLimit = null;

            result.ApplicationRateLimit.Match(
                Some: v => rateLimit = v,
                None: () => { });

            T deserialized = default(T);

            JObject jsonBody = null;

            try
            {
                jsonBody = JObject.Parse(result.Body);

                var codeFragment = jsonBody["code"];

                if (codeFragment != null)
                {
                    code = (int)codeFragment;
                }

                MemoryTraceWriter traceWriter = new MemoryTraceWriter();

                deserialized = JsonConvert.DeserializeObject <T>(result.Body, new JsonSerializerSettings
                {
                    Formatting            = Formatting.Indented,
                    MissingMemberHandling = ApplyStrictResponseParsing
                        ? MissingMemberHandling.Error
                        : MissingMemberHandling.Ignore,
                    TraceWriter = traceWriter
                });

                apiResponse = new DisqusApiResponse <T>(rateLimit, code, Right <ErrorResponseMessage, T>(deserialized));
            }
            catch (Exception ex)
            {
                string errorMessage = "Unknown error";

                var codeFragment = jsonBody?["response"];

                if (codeFragment != null)
                {
                    errorMessage = (string)codeFragment;
                }

                apiResponse = new DisqusApiResponse <T>(rateLimit, code,
                                                        Left <ErrorResponseMessage, T>(new ErrorResponseMessage(errorMessage)
                {
                    Exception = ex
                }));
            }

            return(apiResponse);
        }
Example #3
0
        public DisqusResponseMessage(HttpResponseMessage httpResponseMessage)
        {
            HttpContent          body    = null;
            HttpResponseHeaders  headers = null;
            ApplicationRateLimit applicationRateLimit = null;

            try
            {
                body    = httpResponseMessage.Content;
                headers = httpResponseMessage.Headers;

                IEnumerable <string> values;
                int rateLimitRemaining = -1;
                if (headers.TryGetValues("X-Ratelimit-Remaining", out values))
                {
                    if (!int.TryParse(values.First(), out rateLimitRemaining))
                    {
                        rateLimitRemaining = -1;
                    }
                }

                int rateLimitLimit = -1;
                if (headers.TryGetValues("X-Ratelimit-Limit", out values))
                {
                    if (!int.TryParse(values.First(), out rateLimitLimit))
                    {
                        rateLimitLimit = -1;
                    }
                }

                int rateLimitReset = -1;
                if (headers.TryGetValues("X-Ratelimit-Reset", out values))
                {
                    if (!int.TryParse(values.First(), out rateLimitReset))
                    {
                        rateLimitReset = -1;
                    }
                }

                applicationRateLimit = new ApplicationRateLimit(rateLimitRemaining, rateLimitLimit,
                                                                rateLimitReset);

                // Try getting out first bit of json to see what code is

                // If code is zero then we should try and deserialize the whole object

                var jsonBody = body.ReadAsStringAsync();
                jsonBody.Wait();

                Body = jsonBody.Result;
            }
            catch
            {
            }
            finally
            {
                if (applicationRateLimit != null)
                {
                    ApplicationRateLimit = Some(applicationRateLimit);
                }
            }
        }