/** * @RDE_HEADER@ * VdSession * $Id$ * $HeadURL$ * $Author$ * Created by Astrid Müller, SGAS, 2018-02-26 */ #pragma once #include "avm_export.h" #include "logger.h" #include #include #include namespace AudioVideoManagement { class VdControl; /** * The session is responsible for * - observing the connection to AVS * - regularly issuing a KeepAlive * - setting the context after a successful connect. * * In the application there are several clients communicating with the AVS * via a single VdControl-instance. * When the connection breaks down for some reason it will be re-established. * After that there must be one single instance which is responsible * to again set the context and user profile for the session. * The other clients may continue to communicate with the AVS only after * context and profile have been set. * * @author Astrid Müller, Christian Fröbel */ class AVM_COMMON_EXPORT VdSession : public QObject { Q_OBJECT public: VdSession(VdControl *ctrl, int exerciseId, bool keepAliveEnabled); /** Access to underlying VdControl instance. */ VdControl *control() { return m_ctrl; } bool isEstablished() const { return m_established; } signals: /** * Will be emitted after the connection to AVS has successfully been established * and the context has been set. */ void sessionEstablished(); void disconnected(); private slots: void onConnected(); void onDisconnected(); void onKeepAliveTimerElapsed(); private: VdControl *m_ctrl; bool m_established{false}; int m_exerciseId; const bool m_keepAliveEnabled; QTimer m_keepAliveTimer; LOGGER_T m_logger; }; } // namespace AudioVideoManagement