From 712ad189c99570f686ab779782b2a873e172428e Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Tue, 13 Jun 2023 20:25:05 +0200 Subject: Change syntax style --- .../Extensions/HttpClientExtensions.cs | 37 +++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'MatrixRoomUtils.Core/Extensions/HttpClientExtensions.cs') diff --git a/MatrixRoomUtils.Core/Extensions/HttpClientExtensions.cs b/MatrixRoomUtils.Core/Extensions/HttpClientExtensions.cs index 8eb0226..47b3121 100644 --- a/MatrixRoomUtils.Core/Extensions/HttpClientExtensions.cs +++ b/MatrixRoomUtils.Core/Extensions/HttpClientExtensions.cs @@ -1,19 +1,40 @@ +using System.Text.Json; + namespace MatrixRoomUtils.Core.Extensions; -public static class HttpClientExtensions -{ - public static async Task CheckSuccessStatus(this HttpClient hc, string url) - { +public static class HttpClientExtensions { + public static async Task CheckSuccessStatus(this HttpClient hc, string url) { //cors causes failure, try to catch - try - { + try { var resp = await hc.GetAsync(url); return resp.IsSuccessStatusCode; } - catch (Exception e) - { + catch (Exception e) { Console.WriteLine($"Failed to check success status: {e.Message}"); return false; } } +} + +public class MatrixHttpClient : HttpClient { + public override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + var a = await base.SendAsync(request, cancellationToken); + if (!a.IsSuccessStatusCode) { + Console.WriteLine($"Failed to send request: {a.StatusCode}"); + var content = await a.Content.ReadAsStringAsync(cancellationToken); + if (content.StartsWith('{')) { + var ex = JsonSerializer.Deserialize(content); + if (ex?.RetryAfterMs != null) { + await Task.Delay(ex.RetryAfterMs.Value, cancellationToken); + return await SendAsync(request, cancellationToken); + } + + throw ex!; + } + + throw new InvalidDataException("Encountered invalid data:\n" + content); + } + + return a; + } } \ No newline at end of file -- cgit 1.5.1