#pragma once #include "Core/core.hpp" #include "main_dispatcher.h" #include "logger.h" #include #include #include #include #include #include #include #include #include #include namespace AdlerJson { class MainDispatcher; class PpmHandler : public QObject , protected ParticipantManagement::Interface::Ftc::ModifyParticipantDataReplyHandler , protected ParticipantManagement::Interface::Ftc::ModifyPartyDataReplyHandler { Q_OBJECT public: explicit PpmHandler(QObject *parent = nullptr); bool init(MainDispatcher* mainDispatcher); void getParticipants(); bool isEqNumberInExercise(const int equipmentNumber) const; std::shared_ptr getDtc() { return m_dtcPpm; } std::shared_ptr getFtc() { return m_ftcPpm; } void onCreateParticipant(); void onModifyParticipantDataReply(const Core::FunctionReply &reply); void onModifyPartyDataReply(const Core::FunctionReply &reply); void modifyPartyAdlerProperties(const int wsId, const int assetId, const int partyId, const QString &saaName, const QString &szenarName, const ParticipantManagement::ConnectState &connectState, const bool isVerbund); void parseSQFS(const Feuerstellungsdaten &exSQFS, const int wsId); void parseSQWS(const Waffensystemdaten &exSQWS, const int wsId); void parseSQLP(const Ladeplatzdaten &exSQLP, const int wsId); void removeAllSAAParticipants(const int partyId); ParticipantManagement::Participant findParticipantByInternalName(const QString &internalName, const int partyId, const bool isVerbund); signals: void participantChanged(const QJsonObject &jsonObj); void participantUnmount(const QJsonObject &jsonObj); void participantMount(const QJsonObject &jsonObj); private slots: void onPartyChanged(const ParticipantManagement::Party &data, DataModification modType); void onParticipantChanged(const ParticipantManagement::Participant &data, DataModification modType); void onParticipantPositionChanged(const ParticipantManagement::ParticipantPosition &data, DataModification modType); void onDynamicParticipantDataChanged(const ParticipantManagement::DynamicParticipantData &data, DataModification modType); void onSendParticipantDataTimeout(); private: void handleParticipantPositionChangedExternal(const ParticipantManagement::ParticipantPosition &position); void handleParticipantPositionChangedInternal(const ParticipantManagement::ParticipantPosition &position); void sendParticipantMount(const ParticipantManagement::Participant &part, const ParticipantManagement::Participant &partToBeMounted); void sendParticipantUnmount(const ParticipantManagement::Participant &participant); void sendParticipantPositionChanged(const ParticipantManagement::ParticipantPosition &position); void onModifyParticipantDataReply(const Core::FunctionReplyObject &reply) override; void onModifyPartyDataReply(const Core::FunctionReplyObject &reply) override; QList findAllSAAParticipants(const int partyId); ParticipantManagement::ParticipantData findParticipantDataByInternalName(int &randomNumberInOut, const QString &internalName, const bool isVerbund); ParticipantManagement::ParticipantData findRootUnit(const int partyId); void sendPositionFromTempMap(int rndNmbr, const int partyId, const bool isVerbund); void sendChargesFromTempMap(const int rndNmbr, const int partyId, const bool isVerbund); void sendReadyMessageFromTempMap(int rndNmbr, const int partyId, const bool isVerbund); int convertStatus_L28(const ProjectDataManagement::L28_Status &status); QVector sumUpAnzahlForSameGeschoss(const QVector &geschosse) const; private: NGL::INGLLogger &m_logger; MainDispatcher *m_mainDispatcher; std::shared_ptr m_dtcPpm; std::shared_ptr m_ftcPpm; QHash m_participantIdsByEqNo; QHash m_mountedParticipants; QTimer *m_sendParticipantDataTimer; QVector m_randomNumbers; QMap m_mapLocationToPosition; QMap> m_tempPositionMap; QMap> m_tempinternalNameMap; QMap>> m_tempChargesMap; QMap> m_tempPartDataList; QMap> m_tempReadyMessage; }; }