/** * @RDE_HEADER@ * * TopicData * Uses DDTCs to subscribe to data * * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include #include #include #include #include #include namespace NGL { class INGLLogger; } namespace DataSampleReceiver { /** * */ class TopicData : public DDSConnector::Subscriber { public: explicit TopicData(const dds::domain::DomainParticipant &dp, const std::string &partition, const QVector &vDdro); ~TopicData(); bool initDDTCs(const QVector &vDdro); // Process data for specific topics void processData(const ExerciseManagement::Exercise &data); void processData(const ParticipantManagement::Participant &data); bool processData(const dds::core::xtypes::DynamicData &data, const QString &ns = QString()); // Process data as "typed" data template bool processData(const dds::core::xtypes::DynamicData &data, const QString &topicName) { // TODO: really not needed? Q_UNUSED(topicName) if (rti::core::xtypes::can_convert(data)) { const T typedData = rti::core::xtypes::convert(data); processData(typedData); return true; } return false; } protected: dds::core::xtypes::StructType getTypeCode(const std::string &topicName) const; bool tryProcessDataAsTyped(const dds::core::xtypes::DynamicData &data, const QString &ns); private: QVector m_vDdro; QMap*> m_ddtcMap; NGL::INGLLogger& m_logger; }; }