/** * @RDE_HEADER@ * AvaCommSession * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, SLSE, 2017-07-17 */ #pragma once #include "avm_export.h" #include "ava_types.h" #include "logger.h" #include #include #include namespace AudioVideoManagement { class AvaControl; /** * The session is responsible for * - observing the connection to AVS * - regularly issuing a KeepAlive * - setting the context and user profile after a successful connect. * * In the application there are several clients communicating with the AVS * via a single AvaControl-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 Christian Fröbel */ class AVM_COMMON_EXPORT AvaSession : public QObject { Q_OBJECT public: AvaSession(AvaControl *ctrl, int exerciseId, const QString &operator_, const QString &langCode, AvaAudioPrio, QChar timezone, AvaGuiStyle, bool keepAliveEnabled); /** * Access to underlying AvaControl instance. * @return never nullptr */ AvaControl *control() { return m_ctrl; } bool isEstablished() const { return m_established; } public slots: /** * Connected by AvsSessionConext to AudioPrioObserver::audioPrioChanged(). */ void onAudioPrioChanged(AvaAudioPrio newPrio); /** * Connected by AvsSessionConext to AudioPrioObserver::timezoneChanged(). */ void onTimezoneChanged(QChar newTimezone); signals: /** * Will be emitted after the connection to AVS has successfully been established * and context and user profile have been set. */ void sessionEstablished(); void disconnected(); private slots: void onConnected(); void onDisconnected(); void onKeepAliveTimerElapsed(); private: AvaControl *m_ctrl; bool m_established{false}; int m_exerciseId; QString m_operator; QString m_langCode; AvaAudioPrio m_audioPrio; QChar m_timezone; AvaGuiStyle m_guiStyle; const bool m_keepAliveEnabled; QTimer m_keepAliveTimer; LOGGER_T m_logger; }; } // namespace AudioVideoManagement