194 lines
7.0 KiB
C++
Executable File
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
|