From a8f2dba40ea78edcdfccd560400c50d2ecb76508 Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Sat, 13 Nov 2021 23:02:55 +0100 Subject: [PATCH] use the new interface to create the reports --- src/PlugIn.cpp | 37 +++++++++++++++++++------------------ src/PlugIn.h | 3 +++ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/PlugIn.cpp b/src/PlugIn.cpp index 5347d38..8a54d2c 100644 --- a/src/PlugIn.cpp +++ b/src/PlugIn.cpp @@ -131,11 +131,7 @@ aman::Aircraft* PlugIn::generateAircraftMessage(const EuroScopePlugIn::CRadarTar return retval; } -void PlugIn::OnRadarTargetPositionUpdate(EuroScopePlugIn::CRadarTarget radarTarget) { - /* do nothing if the reporter is not initialized and ignore invalid targets */ - if (false == AircraftReporter::instance().initialized() || false == radarTarget.IsValid()) - return; - +void PlugIn::generateAircraftReportMessage(const EuroScopePlugIn::CRadarTarget& radarTarget, aman::AircraftReport* report) { auto flightPlan = radarTarget.GetCorrelatedFlightPlan(); /* ignore invalid flightplans */ @@ -178,26 +174,25 @@ void PlugIn::OnRadarTargetPositionUpdate(EuroScopePlugIn::CRadarTarget radarTarg coordinate->set_longitude(radarTarget.GetPosition().GetPosition().m_Longitude); /* create the report */ - aman::AircraftReport report; switch (this->ControllerMyself().GetFacility()) { case 1: case 6: - report.set_reportedby(aman::AircraftReport::CENTER); + report->set_reportedby(aman::AircraftReport::CENTER); break; case 2: - report.set_reportedby(aman::AircraftReport::DELIVERY); + report->set_reportedby(aman::AircraftReport::DELIVERY); break; case 3: - report.set_reportedby(aman::AircraftReport::GROUND); + report->set_reportedby(aman::AircraftReport::GROUND); break; case 4: - report.set_reportedby(aman::AircraftReport::TOWER); + report->set_reportedby(aman::AircraftReport::TOWER); break; case 5: - report.set_reportedby(aman::AircraftReport::APPROACH); + report->set_reportedby(aman::AircraftReport::APPROACH); break; default: - report.set_reportedby(aman::AircraftReport::UNKNOWN); + report->set_reportedby(aman::AircraftReport::UNKNOWN); break; } @@ -221,7 +216,7 @@ void PlugIn::OnRadarTargetPositionUpdate(EuroScopePlugIn::CRadarTarget radarTarg if (1.0f >= flightPlan.GetExtractedRoute().GetPointPosition(i).DistanceTo(position)) { iafPosition = flightPlan.GetExtractedRoute().GetPointPosition(i); iafName = flightPlan.GetExtractedRoute().GetPointName(i); - report.set_initialapproachfix(iafName); + report->set_initialapproachfix(iafName); break; } } @@ -253,12 +248,18 @@ void PlugIn::OnRadarTargetPositionUpdate(EuroScopePlugIn::CRadarTarget radarTarg } if (0.01f >= std::abs(distanceToIaf)) distanceToIaf = iafDistance; - report.set_distancetoiaf(static_cast(std::round(distanceToIaf))); + report->set_distancetoiaf(static_cast(std::round(distanceToIaf))); } - report.set_destination(std::string(destination)); - report.set_allocated_aircraft(aircraft); - report.set_allocated_dynamics(dynamics); - report.set_allocated_position(coordinate); + report->set_destination(std::string(destination)); + report->set_allocated_aircraft(aircraft); + report->set_allocated_dynamics(dynamics); + report->set_allocated_position(coordinate); + + /* set the report time */ + std::stringstream stream; + auto reportTime = std::chrono::utc_clock::now(); + stream << std::format("{0:%Y%m%d%H%M%S}", reportTime); + report->set_reporttime(String::splitString(stream.str(), ".")[0]); /* send the report */ if (false == BackendNotification::instance().send(update)) diff --git a/src/PlugIn.h b/src/PlugIn.h index be233b0..30491fd 100644 --- a/src/PlugIn.h +++ b/src/PlugIn.h @@ -17,7 +17,9 @@ #include #pragma warning(push, 0) +#include #include +#include #pragma warning(pop) #include "RadarScreen.h" @@ -40,6 +42,7 @@ namespace aman { }; aman::Aircraft* generateAircraftMessage(const EuroScopePlugIn::CRadarTarget& target); + void generateAircraftReportMessage(const EuroScopePlugIn::CRadarTarget& radarTarget, aman::AircraftReport* report); Communication m_configuration; std::shared_ptr m_screen;