#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ngs_connector.h" #include namespace LtsUtils { class RequestHelper; } namespace HighLevelArchitecture { class NgsHandler; class PpmHandler : public QObject , protected ParticipantManagement::Interface::Ftc::ModifyParticipantDataReplyHandler , protected TrainingAreaBase::Interface::Ftc::DemandInitReplyHandler , protected TrainingAreaBase::Interface::Ftc::DemandBiteReplyHandler , protected TrainingAreaBase::Interface::Ftc::SendParticipantModeReplyHandler { Q_OBJECT public: explicit PpmHandler(NgsHandler *ngsHandler); ~PpmHandler(); bool init(); ParticipantManagement::Role roleForPartyId(int partyId); ProjectDataManagement::ChargeType chargeTypeFromId(int chargeTypeId); ProjectDataManagement::ChargeType chargeTypeFromDisEntity(const std::string &disEntity); ProjectDataManagement::ChargeType chargeTypeFromDisEntity(const QString &disEntity) { return chargeTypeFromDisEntity(disEntity.toStdString()); } int partyIdFromForceIdentifier(rpr2::ForceIdentifierEnum8::ET fi); rpr2::ForceIdentifierEnum8::ET forceIdentifierFromPartyId(int partyId); void onModifyParticipantDataReply(const Core::FunctionReplyObject &replyObject) override final; void onDemandInitReply(const Core::FunctionReplyObject &reply) override final; void onSendParticipantModeReply(const Core::FunctionReplyObject &reply) override final; void onDemandBiteReply(const Core::FunctionReplyObject &reply) override final; QMap externalEquipmentNumbers() const { return m_externalEquipmentNumbers; } Q_SIGNALS: void externalEquipmentNumberAdded(int equipNo); void externalEquipmentNumberRemoved(int equipNo); private Q_SLOTS: void onTypeChanged(const ParticipantManagement::Type &data, DataModification modType); void onDynamicParticipantDataChanged(const ParticipantManagement::DynamicParticipantData &data, DataModification modType); void onParticipantChanged(const ParticipantManagement::Participant &data, DataModification modType); void onParticipantPositionChanged(const ParticipantManagement::ParticipantPosition &data, DataModification modType); void onPartyChanged(const ParticipantManagement::Party &data, DataModification modType); void onParticipantGearEventChanged(const ParticipantManagement::ParticipantGearEvent &data, DataModification modType); void onChargeTypeChanged(const ProjectDataManagement::ChargeType &data, DataModification modType); void onEquipmentBiteChanged(const TrainingAreaBase::EquipmentBite &data, DataModification modType); void onSpatialChanged(int eqId, const ParticipantPosition &pos, qint64 simTimeMSecs); bool onMarkingChanged(int eqId, const QString &marking, qint64 simTimeMSecs); void onParticipantHit(const GuezHitStruct &hitStruct); void onParticipantInit(int eqNo, bool resetManipulation, bool resupplyAmmo, bool resetVulnerabilityState); bool onExconInit(int eqNo, rpr2::ResetPlayerEnum8::ET rp, rpr2::ActivateHelmetObservationEnum8::ET aho); bool onBiteReport(const TrainingAreaBase::EquipmentBite &report); bool onBiteRequest(const TrainingAreaBase::DemandBiteRequest &request); void onManipulationChanged(int eqNo, bool playerIsManipulated, qint64 sampleTime); void onParticipantReceivedInit(int eqId, qint64 simTimeMSecs); void onWeaponFire(const TrainingAreaBase::EquipmentGearEvent &event); void onIsPartOfChanged(int eqNo, int eqNoHost, qint64 simTimeMSecs); void startPublishToNgs(); public slots: void participantInitRequest(const TrainingAreaBase::TetraIcd::Init &request); void participantBiteRequest(const TrainingAreaBase::TetraIcd::DemandBite &request); private: void createParticipant(const ParticipantManagement::Participant &participant); bool createHuman(const ParticipantManagement::Participant &participant); bool createGroundVehicle(const ParticipantManagement::Participant &participant); bool createObserverController(const ParticipantManagement::Participant &participant); bool removeParticipant(const ParticipantManagement::Participant &participant); rpr2::TacticalStatusStruct currentTacticalStatus(int participantId) const; ParticipantManagement::StateInformation currentParticipantStateInformation(int participantId) const; static ParticipantManagement::StateInformation currentParticipantStateInformation(const ParticipantManagement::DynamicParticipantData &data); std::vector currentParticipantGearInformation(int participantId) const; std::vector currentParticipantManipulationInformation(int participantId) const; ParticipantPosition getParticipantPosition(int participantId) const; int getEquipmentNo(int participantId) const; int getParticipantIdByExternalId(int externalId) const; rpr2::ForceIdentifierEnum8::ET getRprForceIdentifierFromPpmForceIdentifier(const ParticipantManagement::HlaForceIdentifierEnum &ppmForceIdentifier) const; ParticipantManagement::Type getParticipantType(int typeId); TypeStruct getTypestruct(int typeId); private: NGL::INGLLogger &m_logger; NgsHandler *m_ngsHandler; std::shared_ptr m_dtcPpm; std::shared_ptr m_ftcPpm; std::shared_ptr m_dtcPdm; std::shared_ptr m_dtsTab; std::shared_ptr m_dtcTab; std::shared_ptr m_ftcTab; std::shared_ptr m_dtcAes; QMap m_types; QMap m_dynPartData; QMap m_partData; QMap m_externalEquipmentNumbers; QMap m_partPosData; QMap m_partyData; QMap m_observerPositions; QMap m_isMountedOn; QSet m_createdParticipantIds; LtsUtils::RequestHelper *m_requestHelper; QMap m_chargeTypes; }; }