/// <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)}"); } } }
/// <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); }