72 lines
1.8 KiB
C#
72 lines
1.8 KiB
C#
using CsvHelper;
|
|
using System;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using CsvHelper.Configuration;
|
|
using CsvHelper.Configuration.Attributes;
|
|
|
|
namespace FlightLoggerLib.Concrete
|
|
{
|
|
public class CSVFlightLogger : IFlightLogger
|
|
{
|
|
private readonly CsvWriter output;
|
|
|
|
|
|
public CSVFlightLogger(string path)
|
|
{
|
|
var filename = Path.Combine(path, DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss") + ".csv");
|
|
var header = !File.Exists(filename);
|
|
|
|
output = new CsvWriter(new StreamWriter(filename, true), new CsvConfiguration(CultureInfo.CurrentCulture)
|
|
{
|
|
SanitizeForInjection = false,
|
|
HasHeaderRecord = header
|
|
});
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
{
|
|
output?.Dispose();
|
|
}
|
|
|
|
|
|
public async Task LogPosition(DateTime eventTime, FlightPosition position)
|
|
{
|
|
var record = new OutputRecord
|
|
{
|
|
Time = eventTime,
|
|
Latitude = position.Latitude,
|
|
Longitude = position.Longitude,
|
|
Altitude = position.Altitude,
|
|
Airspeed = position.Airspeed
|
|
};
|
|
|
|
await output.WriteRecordsAsync(Enumerable.Repeat(record, 1));
|
|
await output.FlushAsync();
|
|
}
|
|
|
|
|
|
|
|
protected class OutputRecord
|
|
{
|
|
[Index(0)]
|
|
public DateTime Time { get; set; }
|
|
|
|
[Index(1)]
|
|
public float Latitude { get; set; }
|
|
|
|
[Index(2)]
|
|
public float Longitude { get; set; }
|
|
|
|
[Index(3)]
|
|
public float Altitude { get; set; }
|
|
|
|
[Index(4)]
|
|
public float Airspeed { get; set; }
|
|
}
|
|
}
|
|
}
|