using System.Net.Http.Json; using MoniteurBaie.DataModels; namespace MoniteurBaie.SerialCom; sealed class DataApi : IDisposable { private readonly ILogger _logger; private readonly HttpClient _httpClient; public DataApi(ILogger logger, IConfiguration config) { _logger = logger; _httpClient = new HttpClient { BaseAddress = new Uri(config.GetValue("BaseUrl")!), Timeout = TimeSpan.FromSeconds(1) }; } public void Send(BatteryControllerPacket packet) => Task.Run(() => DoSend(packet)); private async Task DoSend(BatteryControllerPacket packet) { SerialDataPacket serialPacket; try { serialPacket = PacketParser.ParseSerialDataPacket(packet.SerialData); } catch (Exception ex) { _logger.LogError(ex, "Failed to parse packet."); return; } try { await _httpClient.PostAsJsonAsync("/packets", serialPacket.ToDataPacket(packet.Timestamp), DataPacketContext.Default.DataPacket); } catch (Exception ex) { _logger.LogError(ex, "Failed to send packet."); } } #region IDisposable private bool _disposedValue; private void Dispose(bool disposing) { if (!_disposedValue) { if (disposing) { _httpClient.Dispose(); } _disposedValue = true; } } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } #endregion }