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.
///