#include "initialisation.h" #include #include #include Initialisation::Initialisation() : m_domainParticipant(nullptr) , m_domainParticipantSub(nullptr) , m_domainId(0) , m_exerciseId(-1) , m_ddsPublisher(nullptr) , m_ddsSubscriber(nullptr) , m_subListener(new DDSGeneric::SubscriberListener) , m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("UnitTests.Initialisation")) { if (!DDS::QosProfile::setDefault()) 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 exerciseId, PubSub pubsub) { if (m_domainParticipant == nullptr) m_domainParticipant = dds::domain::DomainParticipant(domainId, DDS::QosProfile::domainParticipantShm()); 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::exercisePartition(exerciseId); dds::core::policy::Partition partitionQos; partitionQos.name( { IDL::exercisePartition(exerciseId) } ); 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, DDS::QosProfile::domainParticipantShm()); domainPart = m_domainParticipantSub; } dds::sub::qos::SubscriberQos subscriberQos = domainPart.default_subscriber_qos(); DEBUG_LOG(m_logger) << "Subsribing on partition " << IDL::exercisePartition(exerciseId); dds::core::policy::Partition partitionQos; partitionQos.name( { IDL::exercisePartition(exerciseId) } ); subscriberQos << partitionQos; m_ddsSubscriber = dds::sub::Subscriber(domainPart, subscriberQos, m_subListener, m_subListener->mask()); } if (m_domainId == 0) m_domainId = domainId; if (m_exerciseId < 0) m_exerciseId = exerciseId; return true; }