/** * Handle the mapping real aircraft <-> nasat configuration * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, NLSE, 2018-08-16 */ #pragma once #include #include #include #include #include "guez_nasat_telegrams.h" #include "logger.h" namespace GuezNasat { class Initialization; class Participant2Dds; struct NasatAircraftParticipantEx final { NasatAircraftParticipantEx(); explicit NasatAircraftParticipantEx(const NasatAircraftParticipant &nap, const std::shared_ptr &publisher); ~NasatAircraftParticipantEx(); std::shared_ptr publisher() const { return m_publisher; } int exerciseId() const { return m_nap.exerciseId(); } int partyId() const; int participantId() const { return m_nap.participantId(); } const NasatAircraftParticipant &participant() const { return m_nap; } Q_DISABLE_COPY(NasatAircraftParticipantEx) private: NasatAircraftParticipant m_nap; std::shared_ptr m_publisher; NGL::INGLLogger &m_logger; }; struct ExerciseParticipantKey { int exerciseId = 0; int participantId = 0; ExerciseParticipantKey() = default; ExerciseParticipantKey(int e, int p) : exerciseId(e), participantId(p) {} bool operator ==(const ExerciseParticipantKey &o) const { return exerciseId == o.exerciseId && participantId == o.participantId; } }; inline uint qHash(ExerciseParticipantKey key, uint seed = 0) { return ::qHash((key.exerciseId << 16) + key.participantId, seed); } class HandlerParticipant : public QObject { Q_OBJECT public: explicit HandlerParticipant(Initialization *mainHandler); ~HandlerParticipant(); bool init() const { return true; } // QHash QHash participantsForNasatId(int nasatId) const; void onNasatAircraftParticipantCreated(const NasatAircraftParticipant &nap); void onNasatAircraftParticipantRemoved(const NasatAircraftParticipant &nap); Core::GeoPosition nasatPosition(int nasatId) const; Q_SIGNALS: void nasatAircraftParticipantRemoved(const NasatAircraftParticipant &nap); public Q_SLOTS: void onNasatPosition(const NasatPosition &position); void onNasatAircraftPosition(int nasatId, const Core::GeoPosition &pos, qint64 ts); void onNasatIdChanged(int oldNasatId, int newNasatId); private: void createNasatAircraftParticipant(const NasatAircraftParticipant &nap, int nasatId); // QHash> QHash> m_activePublisher; // NasatId/AircraftId , GeoPosition QHash m_lastNasatPositionsAsCoreGeoposition; Initialization *m_mainHandler; NGL::INGLLogger &m_logger; }; } // namespace GuezNasat