/** * DdsHandler for HighLevelArchitecture * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-04-07 */ #include "dds_handler.h" #include #include namespace HighLevelArchitecture { DdsHandler::DdsHandler(int domainId, int exerciseId) : m_ddsConnector(new DDSConnector::DdsConnector(domainId, IDL::PartitionType::Exercise, exerciseId)) , m_exerciseHasHlaConnection(false) , m_logger(getLogger("DdsHandler")) { DEBUG_LOG(m_logger) << "DdsHandler(" << domainId << ") for partition: " << m_ddsConnector->getDefaultPartition(); } DdsHandler::~DdsHandler() { m_dtcExm = nullptr; m_pacemaker = nullptr; m_ddsConnector = nullptr; } bool DdsHandler::init(const QStringList &qosFileList) { if (!m_ddsConnector->init(qosFileList)) { ERROR_LOG(m_logger) << "Error initializing dds connections - aborting"; return false; } // default initialize Publisher and Subscriber m_ddsConnector->initPublisherSubscriber(); m_pacemaker = std::make_shared(m_ddsConnector); m_dtcExm = ExerciseManagement::Interface::Dtc::create(m_ddsConnector); connect(m_dtcExm.get(), &ExerciseManagement::Interface::Dtc::exerciseChanged, this, &DdsHandler::onExerciseChanged); m_dtcExm->enableExercise(); return true; } void DdsHandler::onExerciseChanged(const ExerciseManagement::Exercise &ex, DataModification modType) { if (modType == DataModification::eRemoved) return; if (ex.id() != m_ddsConnector->getPartitionId()) return; if (m_exerciseHasHlaConnection == ex.hasHlaInterface()) return; m_exerciseHasHlaConnection = ex.hasHlaInterface(); emit exerciseHlaStateChanged(m_exerciseHasHlaConnection); } } // namespace HighLevelArchitecture