/** * @RDE_HEADER@ * DataTopic Unit test for DDS * $Id$ * $HeadURL$ * $Author$ * Created by Hanna E. Rathje, SLSE, 2015-07-24 */ #include "Initialisation.h" #include #include #include Initialisation::Initialisation() : m_domainParticipant(nullptr) , m_domainParticipantSub(nullptr) , m_domainId(0) , m_partitionId(-1) , m_ddsPublisher(nullptr) , m_ddsSubscriber(nullptr) , m_subListener(new DTC::SubscriberListener) , m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("UnitTests.Initialisation")) { DDS::DefaultQos defaultQos; //if (!defaultQos.setDefaultQos(QStringList("/shd/CTC/SV/.default_dds_profile.xml"))) if (!defaultQos.setDefaultQos()) ERROR_LOG(m_logger) << "Error setting default QoS from xml-file "; } Initialisation::~Initialisation() { cleanupSubscriberListener(); m_ddsSubscriber = nullptr; m_ddsPublisher = nullptr; } void Initialisation::cleanupSubscriberListener() { if (m_ddsSubscriber != nullptr && m_subListener != nullptr) { m_ddsSubscriber.listener(nullptr, dds::core::status::StatusMask::none()); delete m_subListener; m_subListener = nullptr; } } bool Initialisation::initDDS(int domainId, int partitionId, PubSub pubsub) { if (m_domainParticipant == nullptr) m_domainParticipant = dds::domain::DomainParticipant(domainId); // SpatialData will be published to Partition $partitionId if (pubsub == USE_PUBLISHER || pubsub == USE_PUB_SUB) { dds::pub::qos::PublisherQos publisherQos = m_domainParticipant.default_publisher_qos(); DEBUG_LOG(m_logger) << "Publish on partition " << IDL::getPartitionString(partitionId); // use only selected partition dds::core::policy::Partition partitionQos; partitionQos.name( { IDL::getPartitionString(partitionId) } ); publisherQos << partitionQos; m_ddsPublisher = dds::pub::Publisher(m_domainParticipant, publisherQos); } if (pubsub == USE_SUBSCRIBER || pubsub == USE_PUB_SUB) { dds::domain::DomainParticipant domainPart = m_domainParticipant; if ( domainPart == nullptr || m_domainParticipantSub == nullptr) { m_domainParticipantSub = dds::domain::DomainParticipant(domainId); domainPart = m_domainParticipantSub; } dds::sub::qos::SubscriberQos subscriberQos = domainPart.default_subscriber_qos(); DEBUG_LOG(m_logger) << "Subsribing on partition " << IDL::getPartitionString(partitionId); // use only selected partition dds::core::policy::Partition partitionQos; partitionQos.name( { IDL::getPartitionString(partitionId) } ); subscriberQos << partitionQos; dds::core::status::StatusMask mask(DDS_REQUESTED_DEADLINE_MISSED_STATUS | DDS_DATA_AVAILABLE_STATUS | DDS_DATA_ON_READERS_STATUS); m_ddsSubscriber = dds::sub::Subscriber(domainPart, subscriberQos, m_subListener, mask); } if (m_domainId == 0) m_domainId = domainId; if (m_partitionId < 0) m_partitionId = partitionId; return true; }