/** * The Pacemaker class implements functionality to publish Service states in DDS. * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 29.02.2016 */ #pragma once #include #include #include #include "core_export.h" namespace DDSConnector { class DdsConnector; } class QTimer; namespace NGL { class INGLLogger; } namespace Core { class CORE_CLIENT_EXPORT Pacemaker final : public QObject { Q_OBJECT public: explicit Pacemaker(const std::shared_ptr &ddsConnector) : Pacemaker(ddsConnector.get()) {} explicit Pacemaker(DDSConnector::DdsConnector *ddsConnector); ~Pacemaker(); void startTimer(); public Q_SLOTS: void setNewState(Core::RunningState newState, const QString &errorString = QString()); void addPort(unsigned short number, Core::PortType portType, const QString &properties = QStringLiteral("")); // only public for special purposes, not needed to call explicitly by default void publishState(); private: void init(DDSConnector::DdsConnector *ddsConnector); void setNewStateInternal(Core::RunningState newState, const QString &errorString = QString()); void addPortInternal(unsigned short number, Core::PortType portType, const QString &properties = QStringLiteral("")); private: static constexpr const int m_publishTimerDelay = 3000; CurrentRunningState m_state; QTimer *m_publishTimer = nullptr; QThread *m_paceThread = nullptr; DTS::CurrentRunningStateImpl *m_dtsCurrentRunningState; NGL::INGLLogger &m_logger; }; } // namespace Core