diff options
author | Rory& <root@rory.gay> | 2024-06-17 06:17:03 +0200 |
---|---|---|
committer | Emma [it/its]@Rory& <root@rory.gay> | 2024-06-17 06:25:20 +0200 |
commit | 99294322327f899eb01e9c78c0681528cada99d1 (patch) | |
tree | 023a30b463867deb4c8b1b9df8c8b11770846860 | |
parent | Single httpclient implementation (diff) | |
download | LibMatrix-99294322327f899eb01e9c78c0681528cada99d1.tar.xz |
Single HTTP client fixes github/dev/new-httpclient dev/new-httpclient
-rw-r--r-- | .gitignore | 1 | ||||
m--------- | ExampleBots/ModerationBot | 0 | ||||
-rw-r--r-- | LibMatrix.sln.DotSettings.user | 6 | ||||
-rw-r--r-- | LibMatrix/Extensions/JsonConverters.cs | 29 | ||||
-rw-r--r-- | LibMatrix/Extensions/MatrixHttpClient.Single.cs | 15 | ||||
-rw-r--r-- | LibMatrix/Homeservers/FederationClient.cs | 2 | ||||
-rw-r--r-- | LibMatrix/Homeservers/RemoteHomeServer.cs | 2 | ||||
-rw-r--r-- | LibMatrix/RoomTypes/GenericRoom.cs | 4 | ||||
-rw-r--r-- | LibMatrix/Services/HomeserverResolverService.cs | 2 | ||||
-rw-r--r-- | Tests/LibMatrix.Tests/Tests/AuthTests.cs | 2 |
10 files changed, 43 insertions, 20 deletions
diff --git a/.gitignore b/.gitignore index fba66db..509a921 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ **/bin/ **/obj/ +**/*.[Dd]ot[Ss]ettings.[Uu]ser MatrixRoomUtils/ MatrixRoomUtils.Web/wwwroot/MRU.tar.xz /src/ diff --git a/ExampleBots/ModerationBot b/ExampleBots/ModerationBot -Subproject c137f94aeb122c636629fb9361dd73626594f69 +Subproject e4fbb948bce90fdfe757c70081c6dbec84b7024 diff --git a/LibMatrix.sln.DotSettings.user b/LibMatrix.sln.DotSettings.user deleted file mode 100644 index e26043a..0000000 --- a/LibMatrix.sln.DotSettings.user +++ /dev/null @@ -1,6 +0,0 @@ -<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> - <s:Boolean x:Key="/Default/AddReferences/RecentPaths/=_002Fhome_002FRory_002Fgit_002Fmatrix_002FMatrixRoomUtils_002FLibMatrix_002FArcaneLibs_002FArcaneLibs_002Fbin_002FDebug_002Fnet8_002E0_002FArcaneLibs_002Edll/@EntryIndexedValue">True</s:Boolean> - <s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String> - <s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue"><AssemblyExplorer> - <Assembly Path="/home/root@Rory/.cache/NuGetPackages/microsoft.extensions.hosting.abstractions/7.0.0/lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll" /> -</AssemblyExplorer></s:String></wpf:ResourceDictionary> \ No newline at end of file diff --git a/LibMatrix/Extensions/JsonConverters.cs b/LibMatrix/Extensions/JsonConverters.cs new file mode 100644 index 0000000..eed3fb2 --- /dev/null +++ b/LibMatrix/Extensions/JsonConverters.cs @@ -0,0 +1,29 @@ +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace LibMatrix.Extensions; + +public class JsonFloatStringConverter : JsonConverter<float> { + public override float Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + => float.Parse(reader.GetString()!); + + public override void Write(Utf8JsonWriter writer, float value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString(CultureInfo.InvariantCulture)); +} + +public class JsonDoubleStringConverter : JsonConverter<double> { + public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + => double.Parse(reader.GetString()!); + + public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString(CultureInfo.InvariantCulture)); +} + +public class JsonDecimalStringConverter : JsonConverter<decimal> { + public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + => decimal.Parse(reader.GetString()!); + + public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString(CultureInfo.InvariantCulture)); +} \ No newline at end of file diff --git a/LibMatrix/Extensions/MatrixHttpClient.Single.cs b/LibMatrix/Extensions/MatrixHttpClient.Single.cs index 9d0f9d0..e722370 100644 --- a/LibMatrix/Extensions/MatrixHttpClient.Single.cs +++ b/LibMatrix/Extensions/MatrixHttpClient.Single.cs @@ -14,19 +14,18 @@ using ArcaneLibs.Extensions; namespace LibMatrix.Extensions; #if SINGLE_HTTPCLIENT +// TODO: Add URI wrapper for public class MatrixHttpClient { - private static readonly SocketsHttpHandler handler; - - private static readonly HttpClient client; + private static readonly HttpClient Client; static MatrixHttpClient() { try { - handler = new SocketsHttpHandler { + var handler = new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(15), MaxConnectionsPerServer = 4096, EnableMultipleHttp2Connections = true }; - client = new HttpClient(handler) { + Client = new HttpClient(handler) { DefaultRequestVersion = new Version(3, 0) }; } @@ -35,7 +34,7 @@ public class MatrixHttpClient { Console.WriteLine("Original exception (safe to ignore!):"); Console.WriteLine(e); - client = new HttpClient { + Client = new HttpClient { DefaultRequestVersion = new Version(3, 0) }; } @@ -84,7 +83,7 @@ public class MatrixHttpClient { HttpResponseMessage? responseMessage; try { - responseMessage = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); + responseMessage = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken); } catch (Exception e) { Console.WriteLine( @@ -208,7 +207,7 @@ public class MatrixHttpClient { public async Task<bool> CheckSuccessStatus(string url) { //cors causes failure, try to catch try { - var resp = await client.GetAsync(url); + var resp = await Client.GetAsync(url); return resp.IsSuccessStatusCode; } catch (Exception e) { diff --git a/LibMatrix/Homeservers/FederationClient.cs b/LibMatrix/Homeservers/FederationClient.cs index dc0d1f6..22653e4 100644 --- a/LibMatrix/Homeservers/FederationClient.cs +++ b/LibMatrix/Homeservers/FederationClient.cs @@ -9,7 +9,7 @@ public class FederationClient { public FederationClient(string federationEndpoint, string? proxy = null) { HttpClient = new MatrixHttpClient { BaseAddress = new Uri(proxy?.TrimEnd('/') ?? federationEndpoint.TrimEnd('/')), - Timeout = TimeSpan.FromSeconds(120) + // Timeout = TimeSpan.FromSeconds(120) // TODO: Re-implement this }; if (proxy is not null) HttpClient.DefaultRequestHeaders.Add("MXAE_UPSTREAM", federationEndpoint); } diff --git a/LibMatrix/Homeservers/RemoteHomeServer.cs b/LibMatrix/Homeservers/RemoteHomeServer.cs index 8669ca7..ecf3e3a 100644 --- a/LibMatrix/Homeservers/RemoteHomeServer.cs +++ b/LibMatrix/Homeservers/RemoteHomeServer.cs @@ -19,7 +19,7 @@ public class RemoteHomeserver { WellKnownUris = wellKnownUris; ClientHttpClient = new MatrixHttpClient { BaseAddress = new Uri(proxy?.TrimEnd('/') ?? wellKnownUris.Client?.TrimEnd('/') ?? throw new InvalidOperationException($"No client URI for {baseUrl}!")), - Timeout = TimeSpan.FromSeconds(300) + // Timeout = TimeSpan.FromSeconds(300) // TODO: Re-implement this }; if (proxy is not null) ClientHttpClient.DefaultRequestHeaders.Add("MXAE_UPSTREAM", baseUrl); diff --git a/LibMatrix/RoomTypes/GenericRoom.cs b/LibMatrix/RoomTypes/GenericRoom.cs index f15327c..fe2ee8d 100644 --- a/LibMatrix/RoomTypes/GenericRoom.cs +++ b/LibMatrix/RoomTypes/GenericRoom.cs @@ -531,14 +531,14 @@ public class GenericRoom { if (!string.IsNullOrEmpty(to)) uri = uri.AddQuery("to", to); // Console.WriteLine($"Getting related events from {uri}"); - var result = await Homeserver.ClientHttpClient.GetFromJsonAsync<RecursedBatchedChunkedStateEventResponse>(uri); + var result = await Homeserver.ClientHttpClient.GetFromJsonAsync<RecursedBatchedChunkedStateEventResponse>(uri.ToString()); while (result!.Chunk.Count > 0) { foreach (var resp in result.Chunk) { yield return resp; } if (result.NextBatch is null) break; - result = await Homeserver.ClientHttpClient.GetFromJsonAsync<RecursedBatchedChunkedStateEventResponse>(uri.AddQuery("from", result.NextBatch)); + result = await Homeserver.ClientHttpClient.GetFromJsonAsync<RecursedBatchedChunkedStateEventResponse>(uri.AddQuery("from", result.NextBatch).ToString()); } } diff --git a/LibMatrix/Services/HomeserverResolverService.cs b/LibMatrix/Services/HomeserverResolverService.cs index 05ce733..f899230 100644 --- a/LibMatrix/Services/HomeserverResolverService.cs +++ b/LibMatrix/Services/HomeserverResolverService.cs @@ -14,7 +14,7 @@ namespace LibMatrix.Services; public class HomeserverResolverService { private readonly MatrixHttpClient _httpClient = new() { - Timeout = TimeSpan.FromSeconds(60) + // Timeout = TimeSpan.FromSeconds(60) // TODO: Re-implement this }; private static readonly SemaphoreCache<WellKnownUris> WellKnownCache = new(); diff --git a/Tests/LibMatrix.Tests/Tests/AuthTests.cs b/Tests/LibMatrix.Tests/Tests/AuthTests.cs index 67ba8eb..f331dd0 100644 --- a/Tests/LibMatrix.Tests/Tests/AuthTests.cs +++ b/Tests/LibMatrix.Tests/Tests/AuthTests.cs @@ -60,7 +60,7 @@ public class AuthTests : TestBed<TestFixture> { Assert.NotNull(reg.AccessToken); Assert.NotNull(reg.DeviceId); Assert.NotNull(reg.UserId); - var hs = await reg.GetAuthenticatedHomeserver(); + var hs = await _provider.GetAuthenticatedWithToken(reg.Homeserver, reg.AccessToken); Assert.NotNull(hs); Assert.NotNull(hs.WhoAmI); hs.WhoAmI.VerifyRequiredFields(); |