Files
qt5-legatus-legacy/Lts/Plugins/AudioVideoManagement/Data/avs_session_context.cpp
T
2026-08-13 18:33:10 +02:00

194 lines
7.0 KiB
C++
Executable File

/**
* @RDE_HEADER@
* AvsSessionContext
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Fröbel, SLSE, 2017-08-03
*/
#include "avs_session_context.h"
#include "avm_exercise_context.h"
#include "operator_settings_observer.h"
#include "rt_profile_observer.h"
#include <AudioVideoManagement/avs_menus.h>
#include <AudioVideoManagement/ava_comm.h>
#include <AudioVideoManagement/ava_control.h>
#include <AudioVideoManagement/ava_session.h>
#include <AudioVideoManagement/ava_state.h>
#include <AudioVideoManagement/vd_comm.h>
#include <AudioVideoManagement/vd_control.h>
#include <AudioVideoManagement/vd_session.h>
#include <AudioVideoManagement/avs_dialog.h>
#include <AudioVideoManagement/stream_name_mapping_to_ava.h>
#include <AudioVideoManagement/Shared/avs_app.h>
#include <AudioVideoManagement/Shared/playback_app.h>
#include <AudioVideoManagement/Shared/plugin_settings.h>
#include <OperatorManagement/opm_dtc.h>
#include <OperatorManagement/opm.hpp>
#include <InfrastructureManagement/ism_dtc.h>
#include <InfrastructureManagement/ism.hpp>
#include <nglsettings/nglsettings_connections.h>
#include <LtsUtilsSettings/settings.h>
#include <QObject>
#include <QtGlobal>
namespace AudioVideoManagement
{
/// AvsSessionContext
struct AvsSessionContext::Composite
{
Composite(int exerciseId_, int operatorId, const QString &langCode, AvaGuiStyle guiStyle, const AvmExerciseContextHandle &exerciseContextHandle)
: exerciseId(exerciseId_)
, operator_(exerciseContextHandle.opmDtc()->user(operatorId))
, audioPrioObserver(exerciseId_, operatorId, exerciseContextHandle.opmDtc(), exerciseContextHandle.exmDtc())
, avaComm(NGL::Connections::hostName(NGL::Connections::eConnection::AVS_WORKSTATION), NGL::Connections::port(NGL::Connections::eConnection::AVS_WORKSTATION))
, avaControl(&avaComm, exerciseContextHandle.streamNameMapping(), PluginSettings::instance()->avaTimeout())
, avaSession(&avaControl, exerciseId, QString::fromStdString(operator_.name()), langCode, operator_.audioChannelPriority(), audioPrioObserver.timezone(), guiStyle, PluginSettings::instance()->avaKeepAliveEnabled())
, avaState(&avaSession)
, streamNameMappingToAva(&avaSession, exerciseContextHandle.streamNameMapping())
, avsMenus(&avaSession, exerciseContextHandle.dtc().get(), exerciseContextHandle.ismDtc(), avaState.rtState())
, rtProfileObserver(exerciseContextHandle.dtc().get(), &avaSession, avaState.rtState(), exerciseId_, operatorId)
, vdComm(NGL::Connections::hostName(NGL::Connections::eConnection::AVS_WORKSTATION_VD), NGL::Connections::port(NGL::Connections::eConnection::AVS_WORKSTATION_VD))
, vdControl(&vdComm, PluginSettings::instance()->vdTimeout())
, vdSession(&vdControl, exerciseId, PluginSettings::instance()->vdKeepAliveEnabled())
, liveVideoApp(AvsDialog::VIDEO_1, &avaControl)
, videoPlaybackApp(AvsDialog::VIDEO_PLAYBACK, &avaControl, PlaybackApp::AppType::Normal)
, audioPlaybackApp(AvsDialog::AUDIO_PLAYBACK, &avaControl, PlaybackApp::AppType::AlwaysHidden)
, videoPresentationApp(AvsDialog::VIDEO_PRESENTATION, &avaControl, PlaybackApp::AppType::AutoHide)
, audioPresentationApp(AvsDialog::AUDIO_PRESENTATION, &avaControl, PlaybackApp::AppType::AlwaysHidden)
{
QObject::connect(&audioPrioObserver, &OperatorSettingsObserver::audioPrioChanged, &avaSession, &AvaSession::onAudioPrioChanged);
QObject::connect(&audioPrioObserver, &OperatorSettingsObserver::timezoneChanged, &avaSession, &AvaSession::onTimezoneChanged);
avaComm.start();
vdComm.start();
}
int exerciseId;
OperatorManagement::User operator_;
OperatorSettingsObserver audioPrioObserver;
AvaComm avaComm;
AvaControl avaControl;
AvaSession avaSession;
AvaState avaState;
StreamNameMappingToAva streamNameMappingToAva;
AvsMenus avsMenus;
RtProfileObserver rtProfileObserver;
VdComm vdComm;
VdControl vdControl;
VdSession vdSession;
AvsApp liveVideoApp;
PlaybackApp videoPlaybackApp;
PlaybackApp audioPlaybackApp;
PlaybackApp videoPresentationApp;
PlaybackApp audioPresentationApp;
};
AvsSessionContext::AvsSessionContext() = default;
AvsSessionContext::~AvsSessionContext()
{
//Q_ASSERT(m_refCount == 0);
}
bool AvsSessionContext::canAcquire(int exerciseId) const
{
Q_ASSERT(exerciseId > 0);
if (!m_composite)
return true;
return exerciseId == m_composite->exerciseId;
}
AvsSessionContext::Composite *AvsSessionContext::acquire(int exerciseId, int operatorId, const QString &langCode, AvaGuiStyle guiStyle, const AvmExerciseContextHandle &exerciseContextHandle)
{
Q_ASSERT(exerciseId > 0);
if (m_refCount == 0)
m_composite.reset(new Composite(exerciseId, operatorId, langCode, guiStyle, exerciseContextHandle));
else
Q_ASSERT(exerciseId == m_composite->exerciseId);
++m_refCount;
return m_composite.get();
}
void AvsSessionContext::release(Composite *composite)
{
Q_ASSERT(composite);
Q_ASSERT(composite == m_composite.get());
--m_refCount;
if (m_refCount == 0)
m_composite.reset();
}
/// AvsSessionContextHandle
AvsSessionContextHandle::AvsSessionContextHandle(/*LtsSession::LtsSession *session, */AvsSessionContext *context, int exerciseId, int operatorId, const QString &langCode, AvaGuiStyle guiStyle, const AvmExerciseContextHandle &exerciseContextHandle)
: m_composite(context->acquire(exerciseId, operatorId, langCode, guiStyle, exerciseContextHandle), [context](AvsSessionContext::Composite *composite) { context->release(composite); })
{
Q_ASSERT(context);
Q_ASSERT(m_composite);
}
AvaSession *AvsSessionContextHandle::avaSession() const
{
Q_ASSERT(m_composite);
return &m_composite->avaSession;
}
AvaState *AvsSessionContextHandle::avaState() const
{
Q_ASSERT(m_composite);
return &m_composite->avaState;
}
AvsMenus *AvsSessionContextHandle::menus() const
{
Q_ASSERT(m_composite);
return &m_composite->avsMenus;
}
VdSession *AvsSessionContextHandle::vdSession() const
{
Q_ASSERT(m_composite);
return &m_composite->vdSession;
}
AvsApp *AvsSessionContextHandle::liveVideoApp() const
{
Q_ASSERT(m_composite);
return &m_composite->liveVideoApp;
}
PlaybackApp *AvsSessionContextHandle::videoPlaybackApp() const
{
Q_ASSERT(m_composite);
return &m_composite->videoPlaybackApp;
}
PlaybackApp *AvsSessionContextHandle::audioPlaybackApp() const
{
Q_ASSERT(m_composite);
return &m_composite->audioPlaybackApp;
}
PlaybackApp *AvsSessionContextHandle::videoPresentationApp() const
{
Q_ASSERT(m_composite);
return &m_composite->videoPresentationApp;
}
PlaybackApp *AvsSessionContextHandle::audioPresentationApp() const
{
Q_ASSERT(m_composite);
return &m_composite->audioPresentationApp;
}
} // namespace AudioVideoManagement