72 lines
1.6 KiB
C#
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
|
|
}
|