#pragma once #include "svccoreclient_export.h" #if BUILD_RTI #include #endif #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: #if BUILD_RTI explicit Pacemaker(const std::shared_ptr& ddsConnector) : Pacemaker(ddsConnector.get()) { } explicit Pacemaker(DDSConnector::DdsConnector* ddsConnector); #else explicit Pacemaker(void* /*ddsConnector*/) {} explicit Pacemaker() {} #endif ~Pacemaker(); #if BUILD_RTI void startTimer(); #endif public Q_SLOTS: #if BUILD_RTI void setNewState(Core::RunningState newState, const QString& errorString = QString()); void addPort(unsigned short number, Core::PortType portType, const QString& properties = QStringLiteral("")); void publishState(); #endif private: NGL::INGLLogger& m_logger; #if BUILD_RTI 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("")); #endif private: NGL::INGLLogger& m_logger; static constexpr const int m_publishTimerDelay = 3000; #if BUILD_RTI CurrentRunningState m_state; #endif QTimer* m_publishTimer = nullptr; QThread* m_paceThread = nullptr; #if BUILD_RTI DTS::CurrentRunningStateImpl* m_dtsCurrentRunningState; #endif }; } // namespace Core