/** * @RDE_HEADER@ * AvaSession * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, SLSE, 2017-07-17 */ #include "ava_session.h" #include "ava_control.h" #include "iava_comm.h" #include "avs_dialog.h" #include namespace AudioVideoManagement { AvaSession::AvaSession(AvaControl *ctrl, int exerciseId, const QString &operator_, const QString &langCode, AvaAudioPrio audioPrio, QChar timezone, AvaGuiStyle guiStyle, bool keepAliveEnabled) : m_ctrl(ctrl) , m_exerciseId(exerciseId) , m_operator(operator_) , m_langCode(langCode) , m_audioPrio(audioPrio) , m_timezone(timezone) , m_guiStyle(guiStyle) , m_keepAliveEnabled(keepAliveEnabled) , m_logger(getLogger("AvaSession")) { Q_ASSERT(ctrl); m_keepAliveTimer.setInterval(std::chrono::milliseconds(5000).count()); m_keepAliveTimer.setSingleShot(true); connect(m_ctrl->comm(), &IAvaComm::connected, this, &AvaSession::onConnected); connect(m_ctrl->comm(), &IAvaComm::disconnected, this, &AvaSession::onDisconnected); connect(&m_keepAliveTimer, &QTimer::timeout, this, &AvaSession::onKeepAliveTimerElapsed); } void AvaSession::onAudioPrioChanged(AvaAudioPrio newPrio) { m_audioPrio = newPrio; if (!m_established) return; onDisconnected(); onConnected(); } void AvaSession::onTimezoneChanged(QChar newTimezone) { m_timezone = newTimezone; if (!m_established) return; m_ctrl->setTimezone(m_timezone); } void AvaSession::onConnected() { m_ctrl->switchContext(m_exerciseId); m_ctrl->setUserProfile(m_operator, m_langCode, m_audioPrio, m_guiStyle); m_ctrl->setTimezone(m_timezone); m_established = true; if (m_keepAliveEnabled) m_keepAliveTimer.start(); DEBUG_LOG(m_logger) << "session established"; emit sessionEstablished(); } void AvaSession::onDisconnected() { m_keepAliveTimer.stop(); m_established = false; DEBUG_LOG(m_logger) << "disconnected"; emit disconnected(); } void AvaSession::onKeepAliveTimerElapsed() { m_ctrl->keepAlive(); m_keepAliveTimer.start(); } } // namespace AudioVideoManagement