/** * Send Participant data to NGS * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-04-07 */ #pragma once #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::DemandVulnerabilityStateChangeReplyHandler , protected TrainingAreaBase::Interface::Ftc::DemandInitReplyHandler , protected TrainingAreaBase::Interface::Ftc::SendCesHitInformationReplyHandler { 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()); } ProjectDataManagement::ChargeType chargeTypeFromTasCodeDirect(int32_t tasCode); int gearTypeIdFromChargeTypeId(int chargeTypeId); 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 onDemandVulnerabilityStateChangeReply(const Core::FunctionReplyObject &reply) override final; void onSendCesHitInformationReply(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 onChargeTypeChanged(const ProjectDataManagement::ChargeType &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); void onParticipantCesHit(const TrainingAreaBase::SendCesHitInformation &request); bool onExconEngagement(int eqNo, const ProjectDataManagement::VulnerabilityState &state); void onWeaponFire(const TrainingAreaBase::EquipmentGearEvent &event); void onGearChargeState(const TrainingAreaBase::EquipmentGearChargeState &event); void onGearAssignment(const TrainingAreaBase::EquipmentGearAssignment &event); void onEquipmentState(const TrainingAreaBase::EquipmentState &event); void onSensorDataChanged(const TrainingAreaBase::SpecialSensorData &event); void onLaserDesignation(const TrainingAreaBase::LaserDesignation &request); void startPublishToNgs(); public slots: void participantInitRequest(const TrainingAreaBase::TetraIcd::Init &request); void participantVulnerabilityStateRequest(const TrainingAreaBase::TetraIcd::DemandVulnerabilityStateChange &request); void participantCesHitInformationRequest(const TrainingAreaBase::TetraIcd::CesHitInformation &request); private: void createParticipant(const ParticipantManagement::Participant &participant); bool createHuman(const ParticipantManagement::Participant &participant); bool createGroundVehicle(const ParticipantManagement::Participant &participant); bool createAircraft(const ParticipantManagement::Participant &participant); bool createObserverController(const ParticipantManagement::Participant &participant); bool removeParticipant(const ParticipantManagement::Participant &participant); ParticipantManagement::StateInformation currentParticipantStateInformation(int participantId) const; static ParticipantManagement::StateInformation currentParticipantStateInformation(const ParticipantManagement::DynamicParticipantData &data); dds::core::vector currentParticipantGearInformation(int participantId) const; dds::core::vector currentParticipantManipulationInformation(int participantId) const; ProjectDataManagement::VulnerabilityState currentVulnerabilityState(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); static rpr2::DetonationResultCodeEnum8::ET rpr2DetonationResultFromVulnerabilityState(TrainingAreaBase::TetraIcd::VulnerabilityState vulnerabilityState); static rpr2::DetonationResultCodeEnum8::ET rpr2DetonationResultFromPercentage(int percentage); private: 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_ftcTab; std::shared_ptr m_dtcAes; QMap m_types; // By typeId QMap m_dynPartData; // By participantId QMap m_partData; // By participantId QMap m_externalEquipmentNumbers; // participantId, equipmentNumber QMap m_partPosData; // By participantId -- Positions for own Players QMap m_partyData; // By partyId QMap m_observerPositions; // By equipmentNo -- Only foreign entities QMap m_isMountedOn; // By equipmentNo of mounted participant. Value = Host QSet m_createdParticipantIds; LtsUtils::RequestHelper *m_requestHelper; QMap m_chargeTypes; QMap m_gearTypeChargeTypes; NGL::INGLLogger &m_logger; }; } // namespace HighLevelArchitecture