Exemplo n.º 1
0
        /// <summary>
        /// Layer between RestClient.Execute() and EsiAppClient.Execute().
        /// Used for processing exceptions as part of a shared codeand propagating them.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="response"></param>
        private void PropagateErrors(IRestRequest request, IRestResponse response)
        {
            if (!response.IsSuccessful)
            {
                switch (response.StatusCode)
                {
                case (HttpStatusCode.InternalServerError):
                    var _internal = EsiErrors.GetInternalServerError(response.Content);
                    throw new EsiException((int)response.StatusCode, $"{_internal.Error}");

                case (HttpStatusCode.Forbidden):
                    var _forbidden = EsiErrors.GetForbidden(response.Content);
                    throw new EsiException((int)response.StatusCode, $"{_forbidden.SsoStatus}: {_forbidden.Error}");

                default:
                    throw new EsiException((int)response.StatusCode, $"Unsuccessful status code for request {request.Resource}: {response.StatusCode} - {response.ErrorMessage} - {response.Content}\n{JsonConvert.SerializeObject(request)}");
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates an ESI result to wrap a result from DownloadJsonAsync, and synchronizes
        /// its times if necessary.
        /// </summary>
        /// <typeparam name="T">The type of the result.</typeparam>
        /// <param name="result">The downloaded data.</param>
        /// <returns>An ESI result wrapping the data, with errors set as necessary.</returns>
        private EsiResult <T> GetESIResult <T>(JsonResult <T> result)
        {
            result.ThrowIfNull(nameof(result));

            // Update ESI error count; since ESI currently throttles by minute add 90 seconds
            var response = result.Response;

            if (response?.ErrorCount != null && !response.IsNotModifiedResponse && !response.
                IsOKResponse)
            {
                EsiErrors.UpdateErrors((int)response.ErrorCount, DateTime.UtcNow.AddSeconds(90.0));
            }

            var esiResult = new EsiResult <T>(result);
            // Sync clock on the answer if necessary and provided
            var      sync = esiResult.Result as ISynchronizableWithLocalClock;
            DateTime?when = esiResult.CurrentTime;

            if (sync != null && when != null)
            {
                sync.SynchronizeWithLocalClock(DateTime.UtcNow - (DateTime)when);
            }
            return(esiResult);
        }