/** * @RDE_HEADER@ * Data Plugin for ExerciseManangement * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-02-29 */ #include "opm_data_plugin.h" #include #include #include #include #include #include #include #include #include namespace OperatorManagement { std::shared_ptr DataPlugin::createDataInterface(LtsSession::LtsSessionDataDds *session) { std::shared_ptr dtc; std::shared_ptr ftc; if (!session->createTopicClient(dtc, ftc, false, true)) return std::shared_ptr(); return std::make_shared(dtc, ftc, session); } DataInterfaceImpl::DataInterfaceImpl(const std::shared_ptr &dtc, const std::shared_ptr &ftc, LtsSession::LtsSessionDataDds *session) : DataInterface() , m_dtc(dtc) , m_ftc(ftc) , m_foreignInterface(std::make_shared(dtc, ftc, session)) {} ForeignInterfaceImpl::ForeignInterfaceImpl(const std::shared_ptr &dtc, const std::shared_ptr &ftc, LtsSession::LtsSessionDataDds *session) : m_dtc(dtc) , m_ftc(ftc) , m_session(session) , m_timer(nullptr) { // bleibt Global immer geladen? Wenn nein, IDL::PartitionType::Exercise auch noch nötig if (m_session->partitionType() == IDL::PartitionType::Global) { auto ddsConnector = m_session->ddsConnector(); m_dtsOperatorWorkstationAlive.reset(ddsConnector->createDTS()); // send KeepAlive - Messages every n seconds m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, this, &ForeignInterfaceImpl::onSendKeepAlive); m_timer->setSingleShot(false); onSendKeepAlive(); } } ForeignInterfaceImpl::~ForeignInterfaceImpl() { if (m_dtsOperatorWorkstationAlive) { const auto inst = LtsSessionData::LtsSessionData::getInstance(); if (inst->getWorkstationId() > 0) { const OperatorWorkstationAlive alive(inst->getWorkstationId(), 0, 0); m_dtsOperatorWorkstationAlive->remove(alive); } } } void ForeignInterfaceImpl::onSendKeepAlive() { if (!m_timer) return; m_timer->start(30 * 1000); // every 30s if (!m_dtsOperatorWorkstationAlive) return; const auto inst = LtsSessionData::LtsSessionData::getInstance(); if (inst->getWorkstationId() <= 0) return; const OperatorWorkstationAlive alive(inst->getWorkstationId(), inst->getOperatorId(), QDateTime::currentMSecsSinceEpoch()); m_dtsOperatorWorkstationAlive->write(alive); } } // namespace OperatorManagement