#pragma once #include "pub_sub_base.h" #include #include #include #include namespace NGL { class INGLLogger; } namespace DDSConnector { class DDSCONNECTOR_EXPORT Subscriber : public PubSubBase { public: Subscriber(const dds::domain::DomainParticipant &domainParticipant, const std::string &partition, bool bUseSubscriberListener = true); virtual ~Subscriber(); dds::sub::Subscriber getDdsSubscriber() const { return m_ddsSubscriber; } DDSGeneric::SubscriberListener *getSubscriberListener() { return m_subscriberListener; } template DTC_TYPE *create(std::function cb) { DTC_TYPE* dtc = new DTC_TYPE; if (!dtc->create(m_domainParticipant, m_ddsSubscriber, m_subscriberListener)) { delete dtc; return nullptr; } dtc->setSubscriberCallback(cb); return dtc; } DTC::Ddtc *create(const std::function &cb, const dds::core::xtypes::StructType &structType, DDSGeneric::SubscriberListener *listener = nullptr, const std::string &specialTopicName = std::string()) { if (!listener) listener = getSubscriberListener(); DTC::DdtcImpl *ddtc = new DTC::DdtcImpl(getDomainParticipant(), getDdsSubscriber(), listener, structType, specialTopicName); ddtc->setSubscriberCallback(cb); return ddtc; } protected: void initDDS(); void deleteDDS(); protected: dds::sub::Subscriber m_ddsSubscriber; DDSGeneric::SubscriberListener *m_subscriberListener; rti::core::ListenerBinder< dds::sub::Subscriber, dds::sub::SubscriberListener> m_subscriberListenerBinder; }; }