/** * @RDE_HEADER@ * PpmHandler for AdlerJson Plugin * $Id: ppm_handler.h 62899 2024-05-29 11:08:50Z ewert_j $ * $HeadURL: svn://slssvn/TDS/branches/product/features/ufom/Lts/Proxies/TrainingAreaBase/Plugins/AdlerJson/ppm_handler.h $ * $Author: ewert_j $ * Created by Julius Ewert, ESIM, 2024-03-20 */ #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(); // ModifyParticipantDataRequestHandler interface 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); //parse functions that trigger other services 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: MainDispatcher *m_mainDispatcher; std::shared_ptr m_dtcPpm; std::shared_ptr m_ftcPpm; QHash m_participantIdsByEqNo; // eqNo, partId QHash m_mountedParticipants;// participantId of passanger, participantId of Vehicle QTimer *m_sendParticipantDataTimer; QVector m_randomNumbers; //maps QMap m_mapLocationToPosition; QMap> m_tempPositionMap; QMap> m_tempinternalNameMap; QMap>> m_tempChargesMap; QMap> m_tempPartDataList; QMap> m_tempReadyMessage; }; } // namespace AdlerJson