1
0
Files
moniteur-baie/SerialCom/DataApi.cs
2023-06-21 13:51:38 +02:00

72 lines
1.6 KiB
C#

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<string>("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
}