Minor refactor to `HttpCommunication`

This commit is contained in:
YoshiRulz 2025-01-17 01:27:05 +10:00
parent cbacebcee4
commit 41547824aa
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
1 changed files with 14 additions and 2 deletions

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -8,6 +9,8 @@ namespace BizHawk.Client.Common
{ {
public sealed class HttpCommunication public sealed class HttpCommunication
{ {
private const string MIME_FORM_URLENC = "application/x-www-form-urlencoded";
private readonly HttpClient _client = new HttpClient(); private readonly HttpClient _client = new HttpClient();
private readonly Func<byte[]> _takeScreenshotCallback; private readonly Func<byte[]> _takeScreenshotCallback;
@ -30,6 +33,15 @@ namespace BizHawk.Client.Common
_client.DefaultRequestHeaders.UserAgent.ParseAdd(VersionInfo.UserAgentEscaped); _client.DefaultRequestHeaders.UserAgent.ParseAdd(VersionInfo.UserAgentEscaped);
} }
private HttpContent ContentObjectFor(string payload, [ConstantExpected] string mimeType)
=> mimeType switch
{
MIME_FORM_URLENC => new FormUrlEncodedContent([ new("payload", payload) ]),
#pragma warning disable BHI1005 // exception type
_ => throw new NotImplementedException()
#pragma warning restore BHI1005
};
public string ExecGet(string url = null) => Get(url ?? GetUrl).Result; public string ExecGet(string url = null) => Get(url ?? GetUrl).Result;
/// <inheritdoc cref="ExecPostAsForm"/> /// <inheritdoc cref="ExecPostAsForm"/>
@ -46,7 +58,7 @@ namespace BizHawk.Client.Common
{ {
return Post( return Post(
url ?? PostUrl, url ?? PostUrl,
new FormUrlEncodedContent(new Dictionary<string, string> { ["payload"] = payload }), ContentObjectFor(payload: payload, mimeType: MIME_FORM_URLENC),
sendAdvanceRequest: payload.Length >= ExpectContinueThreshold sendAdvanceRequest: payload.Length >= ExpectContinueThreshold
).Result; ).Result;
} }
@ -64,7 +76,7 @@ namespace BizHawk.Client.Common
return null; return null;
} }
public async Task<string> Post(string url, FormUrlEncodedContent content, bool sendAdvanceRequest = false) public async Task<string> Post(string url, HttpContent content, bool sendAdvanceRequest = false)
{ {
_client.DefaultRequestHeaders.ConnectionClose = true; _client.DefaultRequestHeaders.ConnectionClose = true;
_client.DefaultRequestHeaders.ExpectContinue = sendAdvanceRequest; _client.DefaultRequestHeaders.ExpectContinue = sendAdvanceRequest;