#pragma once #include #include #include #include namespace OperatorManagement { namespace Interface { class Dtc; } } namespace AudioVideoManagement { namespace Interface { class Dtc; } class AvaSession; class AvaState; class StreamNameMapping; class AvsMenus; class VdSession; class AvmExerciseContextHandle; class AvsApp; class PlaybackApp; class AvsSessionContext { public: struct Composite; AvsSessionContext(); ~AvsSessionContext(); bool canAcquire(int exerciseId) const; Composite *acquire(int exerciseId, int operatorId, const QString &langCode, AvaGuiStyle, const AvmExerciseContextHandle &exerciseContextHandle); void release(Composite *composite); private: std::unique_ptr m_composite; int m_refCount{0}; }; class AvsSessionContextHandle { public: AvsSessionContextHandle() = default; AvsSessionContextHandle(AvsSessionContext *context, int exerciseId, int operatorId, const QString &langCode, AvaGuiStyle, const AvmExerciseContextHandle &exerciseContextHandle); operator bool() const { return m_composite.get(); } AvaSession *avaSession() const; AvaState *avaState() const; AvsMenus *menus() const; VdSession *vdSession() const; AvsApp *liveVideoApp() const; PlaybackApp *videoPlaybackApp() const; PlaybackApp *audioPlaybackApp() const; PlaybackApp *videoPresentationApp() const; PlaybackApp *audioPresentationApp() const; private: using Releaser = std::function; std::unique_ptr m_composite; }; }