#pragma once #include "svccoreclient_export.h" #include #include #include 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("")); void publishState(); private: NGL::INGLLogger& m_logger; 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: NGL::INGLLogger& m_logger; static constexpr const int m_publishTimerDelay = 3000; CurrentRunningState m_state; QTimer* m_publishTimer = nullptr; QThread* m_paceThread = nullptr; DTS::CurrentRunningStateImpl* m_dtsCurrentRunningState; }; } // namespace Core