diff --git a/client/Helpers/ServerHelper.cs b/client/Helpers/ServerHelper.cs index 827c838..bc3c9e9 100644 --- a/client/Helpers/ServerHelper.cs +++ b/client/Helpers/ServerHelper.cs @@ -3,6 +3,8 @@ using System.Net.Http.Headers; namespace OrangeGuidanceTomestone.Helpers; internal static class ServerHelper { + private static readonly HttpClient Client = new(); + internal static HttpRequestMessage GetRequest(string? apiKey, HttpMethod method, string tail, string? contentType = null, HttpContent? content = null) { if (!tail.StartsWith('/')) { tail = '/' + tail; @@ -27,6 +29,6 @@ internal static class ServerHelper { internal static async Task SendRequest(string? apiKey, HttpMethod method, string tail, string? contentType = null, HttpContent? content = null) { var req = GetRequest(apiKey, method, tail, contentType, content); - return await new HttpClient().SendAsync(req, HttpCompletionOption.ResponseHeadersRead); + return await Client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead); } } diff --git a/client/Messages.cs b/client/Messages.cs index 68f0c78..fcddb1b 100644 --- a/client/Messages.cs +++ b/client/Messages.cs @@ -172,26 +172,34 @@ internal class Messages : IDisposable { this.RemoveVfx(null, null); Task.Run(async () => { - var resp = await ServerHelper.SendRequest( - this.Plugin.Config.ApiKey, - HttpMethod.Get, - $"/messages/{territory}" - ); - var json = await resp.Content.ReadAsStringAsync(); - var messages = JsonConvert.DeserializeObject(json)!; - - await this.CurrentMutex.WaitAsync(); - this.Current.Clear(); - - foreach (var message in messages) { - this.Current[message.Id] = message; - this.SpawnQueue.Enqueue(message); + try { + await this.DownloadMessages(territory); + } catch (Exception ex) { + PluginLog.LogError(ex, $"Failed to get messages for territory {territory}"); } - - this.CurrentMutex.Release(); }); } + private async Task DownloadMessages(ushort territory) { + var resp = await ServerHelper.SendRequest( + this.Plugin.Config.ApiKey, + HttpMethod.Get, + $"/messages/{territory}" + ); + var json = await resp.Content.ReadAsStringAsync(); + var messages = JsonConvert.DeserializeObject(json)!; + + await this.CurrentMutex.WaitAsync(); + this.Current.Clear(); + + foreach (var message in messages) { + this.Current[message.Id] = message; + this.SpawnQueue.Enqueue(message); + } + + this.CurrentMutex.Release(); + } + private void RemoveVfx(object? sender, EventArgs? e) { this.RemoveVfx(); }