#pragma once #include #include #include #include #include "pub_sub_base.h" namespace DDSConnector { class DDSCONNECTOR_EXPORT Publisher : public PubSubBase { public: Publisher(const dds::domain::DomainParticipant &domainParticipant, const std::string &partition); ~Publisher(); void enableBatchedWriter(bool bEnable); dds::pub::Publisher getDdsPublisher() const { return m_ddsPublisher; } template bool write(const T &data) { using myDWO = DDSGeneric::GenericDataWriter; using myDTS = DTS::GenericDtsImpl< myDWO >; std::string dwoType = DDS::topic_type_name::value(); DEBUG_LOG(m_logger) << "dwoType = " << dwoType; myDTS *dts = static_cast(m_dtsMap.value(dwoType)); if (dts == nullptr) { dts = new myDTS(m_domainParticipant, m_ddsPublisher); m_dtsMap.insert(dwoType, dts); } return dts->write(data); } bool write(const dds::core::xtypes::DynamicData &data) { return write(data, data.type().name()); } bool write(const dds::core::xtypes::DynamicData &data, const std::string &topicName); protected: void initDDS(); void deleteDDS(); protected: dds::pub::Publisher m_ddsPublisher; QMap m_dtsMap; QMap m_dynamicTypeMap; }; }