From 321f39dc55c5f458716a7946b22a28ed0a48bf82 Mon Sep 17 00:00:00 2001 From: Raymond Date: Wed, 10 Nov 2021 11:56:39 -0500 Subject: [PATCH] Reuse httpclient, create in Util --- .../IMarketBoardUploader.cs | 11 +++++--- .../UniversalisMarketBoardUploader.cs | 25 +++++++++---------- .../Internal/Windows/PluginImageCache.cs | 6 ++--- Dalamud/Plugin/Internal/PluginManager.cs | 3 +-- Dalamud/Plugin/Internal/PluginRepository.cs | 4 +-- Dalamud/Support/BugBait.cs | 6 ++--- Dalamud/Utility/Util.cs | 7 ++++++ 7 files changed, 34 insertions(+), 28 deletions(-) diff --git a/Dalamud/Game/Network/Internal/MarketBoardUploaders/IMarketBoardUploader.cs b/Dalamud/Game/Network/Internal/MarketBoardUploaders/IMarketBoardUploader.cs index a867261f2..6ec2a997b 100644 --- a/Dalamud/Game/Network/Internal/MarketBoardUploaders/IMarketBoardUploader.cs +++ b/Dalamud/Game/Network/Internal/MarketBoardUploaders/IMarketBoardUploader.cs @@ -1,3 +1,5 @@ +using System.Threading.Tasks; + using Dalamud.Game.Network.Structures; namespace Dalamud.Game.Network.Internal.MarketBoardUploaders @@ -11,18 +13,21 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders /// Upload data about an item. /// /// The item request data being uploaded. - void Upload(MarketBoardItemRequest item); + /// An async task. + Task Upload(MarketBoardItemRequest item); /// /// Upload tax rate data. /// /// The tax rate data being uploaded. - void UploadTax(MarketTaxRates taxRates); + /// An async task. + Task UploadTax(MarketTaxRates taxRates); /// /// Upload information about a purchase this client has made. /// /// The purchase handler data associated with the sale. - void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler); + /// An async task. + Task UploadPurchase(MarketBoardPurchaseHandler purchaseHandler); } } diff --git a/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs index 104faef36..17727dff9 100644 --- a/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs +++ b/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; using System.Net.Http; -using System.Net.Http.Headers; using System.Text; +using System.Threading.Tasks; using Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis.Types; using Dalamud.Game.Network.Structures; +using Dalamud.Utility; using Newtonsoft.Json; using Serilog; @@ -29,10 +30,9 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis } /// - public void Upload(MarketBoardItemRequest request) + public async Task Upload(MarketBoardItemRequest request) { var clientState = Service.Get(); - using var client = new HttpClient(); Log.Verbose("Starting Universalis upload."); var uploader = clientState.LocalContentId; @@ -80,7 +80,7 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis var listingPath = "/upload"; var listingUpload = JsonConvert.SerializeObject(listingsUploadObject); Log.Verbose($"{listingPath}: {listingUpload}"); - client.PostAsync($"{ApiBase}{listingPath}/{ApiKey}", new StringContent(listingUpload, Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); + await Util.HttpClient.PostAsync($"{ApiBase}{listingPath}/{ApiKey}", new StringContent(listingUpload, Encoding.UTF8, "application/json")); // ==================================================================================== @@ -108,7 +108,7 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis var historyPath = "/upload"; var historyUpload = JsonConvert.SerializeObject(historyUploadObject); Log.Verbose($"{historyPath}: {historyUpload}"); - client.PostAsync($"{ApiBase}{historyPath}/{ApiKey}", new StringContent(historyUpload, Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); + await Util.HttpClient.PostAsync($"{ApiBase}{historyPath}/{ApiKey}", new StringContent(historyUpload, Encoding.UTF8, "application/json")); // ==================================================================================== @@ -116,10 +116,9 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis } /// - public void UploadTax(MarketTaxRates taxRates) + public async Task UploadTax(MarketTaxRates taxRates) { var clientState = Service.Get(); - using var client = new HttpClient(); // ==================================================================================== @@ -142,7 +141,7 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis var taxUpload = JsonConvert.SerializeObject(taxUploadObject); Log.Verbose($"{taxPath}: {taxUpload}"); - client.PostAsync($"{ApiBase}{taxPath}/{ApiKey}", new StringContent(taxUpload, Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); + await Util.HttpClient.PostAsync($"{ApiBase}{taxPath}/{ApiKey}", new StringContent(taxUpload, Encoding.UTF8, "application/json")); // ==================================================================================== @@ -155,12 +154,9 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis /// to track the available listings, that is done via the listings packet. All this does is remove /// a listing, or delete it, when a purchase has been made. /// - public void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler) + public async Task UploadPurchase(MarketBoardPurchaseHandler purchaseHandler) { var clientState = Service.Get(); - using var client = new HttpClient(); - - client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(ApiKey); var itemId = purchaseHandler.CatalogId; var worldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0; @@ -180,7 +176,10 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis var deleteListing = JsonConvert.SerializeObject(deleteListingObject); Log.Verbose($"{deletePath}: {deleteListing}"); - client.PostAsync($"{ApiBase}{deletePath}", new StringContent(deleteListing, Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); + var content = new StringContent(deleteListing, Encoding.UTF8, "application/json"); + content.Headers.Add("Authorization", ApiKey); + + await Util.HttpClient.PostAsync($"{ApiBase}{deletePath}", content); // ==================================================================================== diff --git a/Dalamud/Interface/Internal/Windows/PluginImageCache.cs b/Dalamud/Interface/Internal/Windows/PluginImageCache.cs index 435d30e30..6313a1c43 100644 --- a/Dalamud/Interface/Internal/Windows/PluginImageCache.cs +++ b/Dalamud/Interface/Internal/Windows/PluginImageCache.cs @@ -44,8 +44,6 @@ namespace Dalamud.Interface.Internal.Windows // TODO: Change back to master after release private const string MainRepoImageUrl = "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/api4/{0}/{1}/images/{2}"; - private readonly HttpClient httpClient = new(); - private BlockingCollection> downloadQueue = new(); private CancellationTokenSource downloadToken = new(); @@ -264,7 +262,7 @@ namespace Dalamud.Interface.Internal.Windows HttpResponseMessage data; try { - data = await this.httpClient.GetAsync(url); + data = await Util.HttpClient.GetAsync(url); } catch (InvalidOperationException) { @@ -381,7 +379,7 @@ namespace Dalamud.Interface.Internal.Windows HttpResponseMessage data; try { - data = await this.httpClient.GetAsync(url); + data = await Util.HttpClient.GetAsync(url); } catch (InvalidOperationException) { diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index 532a0af2b..4eb06abaf 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -409,8 +409,7 @@ namespace Dalamud.Plugin.Internal var downloadUrl = useTesting ? repoManifest.DownloadLinkTesting : repoManifest.DownloadLinkInstall; var version = useTesting ? repoManifest.TestingAssemblyVersion : repoManifest.AssemblyVersion; - using var client = new HttpClient(); - var response = await client.GetAsync(downloadUrl); + var response = await Util.HttpClient.GetAsync(downloadUrl); response.EnsureSuccessStatusCode(); var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory.FullName, repoManifest.InternalName, version.ToString())); diff --git a/Dalamud/Plugin/Internal/PluginRepository.cs b/Dalamud/Plugin/Internal/PluginRepository.cs index cf579dce6..3e4e93fb2 100644 --- a/Dalamud/Plugin/Internal/PluginRepository.cs +++ b/Dalamud/Plugin/Internal/PluginRepository.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Dalamud.Logging.Internal; using Dalamud.Plugin.Internal.Types; +using Dalamud.Utility; using Newtonsoft.Json; namespace Dalamud.Plugin.Internal @@ -74,10 +75,9 @@ namespace Dalamud.Plugin.Internal try { Log.Information($"Fetching repo: {this.PluginMasterUrl}"); - using var client = new HttpClient(); // ?ticks causes a cache invalidation. Get a fresh repo every time. - using var response = await client.GetAsync(this.PluginMasterUrl + "?" + DateTime.Now.Ticks); + using var response = await Util.HttpClient.GetAsync(this.PluginMasterUrl + "?" + DateTime.Now.Ticks); response.EnsureSuccessStatusCode(); var data = await response.Content.ReadAsStringAsync(); diff --git a/Dalamud/Support/BugBait.cs b/Dalamud/Support/BugBait.cs index f72ea9945..9c5db6514 100644 --- a/Dalamud/Support/BugBait.cs +++ b/Dalamud/Support/BugBait.cs @@ -1,4 +1,4 @@ -using System.Net.Http; +using System.Net.Http; using System.Text; using System.Threading.Tasks; @@ -28,8 +28,6 @@ namespace Dalamud.Support if (content.IsNullOrWhitespace()) return; - using var client = new HttpClient(); - var model = new FeedbackModel { Content = content, @@ -45,7 +43,7 @@ namespace Dalamud.Support } var postContent = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"); - var response = await client.PostAsync(BugBaitUrl, postContent); + var response = await Util.HttpClient.PostAsync(BugBaitUrl, postContent); response.EnsureSuccessStatusCode(); } diff --git a/Dalamud/Utility/Util.cs b/Dalamud/Utility/Util.cs index a16eeb40b..b40a097a2 100644 --- a/Dalamud/Utility/Util.cs +++ b/Dalamud/Utility/Util.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Text; @@ -23,6 +24,12 @@ namespace Dalamud.Utility { private static string gitHashInternal; + /// + /// Gets an httpclient for usage. + /// Do NOT await this. + /// + public static HttpClient HttpClient { get; } = new(); + /// /// Gets the assembly version of Dalamud. ///