Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/VideoOverlayManagement/main_handler.cpp
T
torstenandCopilot b774f4035c Qt6 Migration: DDS-Stubs, Logger-Fixes, Export-Header Korrekturen
- NGL_ADD_LIBRARY2: 87 CMakeLists.txt konvertiert für Export-Header Generierung
- 44 Export-Header Include-Pfade korrigiert (_export.h)
- 81 DDS-Stub-Header generiert (*_dtc.h, *_fts.h, *_dts.h, *_ftc.h)
- INGLLogger: Duplikat gelöscht, m_logger Member entfernt, variadische Makros
- Q_FUNC_INFO Redefinition behoben (Qt6 definiert bereits)
- FATAL_LOG Makro hinzugefügt
- InfrastructureManagement DDS-Stubs (ism.hpp, ism_enums.hpp, ism_ftc.h)
- FilterManagement DDS-Stubs (flt_ftc.h, flt_dts.h)
- AreaEffectSimulation DDS-Stubs (aes.hpp, aes_enums.hpp)
- SymbolAppearance Klasse vollständig definiert mit content() Methode
- BuildingComponentFilter Klasse definiert mit Copy-Konstruktor
- Ftc Factory: nullptr Return (abstract class)
- AesFilter Klasse in aes.hpp hinzugefügt
- Dtc Klasse in ppm.hpp mit participantChanged Signal
- AesType Enum: alle 15 At* Werte definiert
- AesEffectState_def: EsReceived hinzugefügt
- DataModification Enum: eAdded/eModified/eRemoved
- function_reply_object.h → core_types.h Include-Pfad (72 Dateien)
- Enum-Class-Streaming Template-Operator in INGLLogger.h
- ism_mounting_point.h: QImage → QtGui/QImage, QGuiApplication/QScreen
- ism_data_plugin_interface.h: QSet Include, Include-Reihenfolge
- QRegExp → QRegularExpression in tpm_js_parser.cpp
- .underlying() Aufrufe zu direktem Enum-Vergleich korrigiert
- Include-Pfade: aes.hpp in symbol_appearance_settings_impl.h und aes_display_filter_impl.h

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-19 06:06:24 +02:00

214 lines
6.5 KiB
C++
Executable File

/**
* MainHandler for VideoOverlayManagement
* $Id$
* $HeadURL$
* $Author$
* Created by hjl, SLSE, 2016-06-23
*/
#include "main_handler.h"
#include "settings.h"
#include <QTimer>
#include <DDS/Core/pacemaker.h>
using namespace VideoOverlayManagement;
MainHandler::MainHandler(QObject *parent)
: QObject(parent)
, m_exerciseId(0)
, m_avsIf(new AvsInterface(true, this))
, m_avsConnectionState(AvsIfConnectionState::Undefined)
, m_ddsHandler(nullptr)
, m_handlerParticipantData(nullptr)
, m_handlerInfrastructureData(nullptr)
, m_handlerOverlays(nullptr)
, m_checkConnectTimer(new QTimer(this))
, m_keepAliveTriggerTimer(new QTimer(this))
, m_bAvsSocketWarnedOnce(false)
{
} // end of ctor()
//-----------------------------------------------------------------------------
MainHandler::~MainHandler()
{
m_ddsHandler.reset();
} // end of dtor()
//-----------------------------------------------------------------------------
bool MainHandler::init(int domainId, int exerciseId)
{
INFO_LOG() << "Start VideoOverlayManagement MainHandler.";
m_exerciseId = exerciseId;
// init AVS-Interface
QString hostName = Settings::getAvsHostname();
quint16 port = Settings::getAvsAvaPort();
INFO_LOG() << "Init AVS-Interface Hostname/Ip:" << hostName
<< " Port: " << port;
m_avsIf->start(hostName, port);
connect(m_avsIf, &AvsInterface::avsIfConnectionState,
this, &MainHandler::onAvsIfConnectionState);
connect(m_avsIf, &AvsInterface::avsCmdState,
this, &MainHandler::onAvsCmdState);
connect(m_avsIf, &AvsInterface::avsKeepAliveTimeout,
this, &MainHandler::onAvsKeepAliveTimeout);
connect(m_keepAliveTriggerTimer, &QTimer::timeout,
this, &MainHandler::onSendKeepAlive);
// initialize DDS
// for VideoOverlayManagement => exerciseId = partitionId
m_ddsHandler.reset(new DdsHandler(domainId, exerciseId));
if (!m_ddsHandler->init())
{
ERROR_LOG() << "Initialisation DdsHandler failed.";
if (m_ddsHandler->pacemaker())
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError);
return false;
}
// initialize handlerParticipantData
m_handlerParticipantData.reset(new HandlerParticipantData(m_ddsHandler, this));
if (!m_handlerParticipantData->init())
{
ERROR_LOG() << "Initialisation HandlerPlayerData failed.";
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError);
return false;
}
// initialize handlerInfraStructureData
m_handlerInfrastructureData.reset(new HandlerInfrastructureData(m_ddsHandler, this));
if (!m_handlerInfrastructureData->init(m_exerciseId))
{
ERROR_LOG() << "Initialisation HandlerInfrastructreData failed.";
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError);
return false;
}
// Initialisation of OverlayHandler wait until AVS is connected
connect(m_checkConnectTimer, &QTimer::timeout,
this, &MainHandler::onTryToInitOverlayHandler);
m_checkConnectTimer->start(1000);
INFO_LOG() << "VOM Handler initialized. (Connection to AVS may be still pending) ";
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::Starting);
return true;
} // end of init()
//-----------------------------------------------------------------------------
bool MainHandler::onTryToInitOverlayHandler()
{
m_avsConnectionState = m_avsIf->getAvsIfState();
if (m_avsConnectionState != AvsIfConnectionState::Connected)
{
if (!m_bAvsSocketWarnedOnce)
{
m_bAvsSocketWarnedOnce = true;
WARNING_LOG() << "MainHandler::onTryToInitOverlayHandler()"
<< " Wait for AvsIfConnectionState::Connected... ";
}
return false;
}
m_bAvsSocketWarnedOnce = true; // reset
m_checkConnectTimer->stop();
// initialize handlerOverlays
m_handlerOverlays.reset(new HandlerOverlays(m_avsIf, m_handlerParticipantData, m_handlerInfrastructureData, m_exerciseId, this));
if (!m_handlerOverlays->init())
{
ERROR_LOG() << "Initialisation HandlerOverlays failed.";
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StoppedError);
return false;
}
INFO_LOG() << "VOM Handler initialized. (Connection to AVS established) ";
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::Running);
return true;
} // end of onTryToInitOverlayHandler()
//-----------------------------------------------------------------------------
void MainHandler::onAvsIfConnectionState(AvsIfConnectionState state)
{
switch (state)
{
case AvsIfConnectionState::Connected:
INFO_LOG() << "AvsIfConnectionState::Connected ... start keepAliveTriggerTimer";
m_keepAliveTriggerTimer->start(Settings::getAvsKeepAliveTriggerRequestTime());
break;
case AvsIfConnectionState::Disconnected:
m_keepAliveTriggerTimer->stop();
break;
case AvsIfConnectionState::TryReconnect:
m_keepAliveTriggerTimer->stop();
break;
case AvsIfConnectionState::ConnectionError:
ERROR_LOG() << "AvsIfConnectionState::ConnectionError !";
m_keepAliveTriggerTimer->stop();
m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StoppedError);
break;
case AvsIfConnectionState::Undefined:
default:
WARNING_LOG() << "Undefined AvsIfConnectionState !";
break;
}
} // end of onAvsIfConnectionState()
//-----------------------------------------------------------------------------
void MainHandler::onAvsCmdState(AvsCmdState state)
{
bool bOk = false;
switch (state)
{
case AvsCmdState::Ok:
INFO_LOG() << "AvsCmdState::Ok";
bOk = true;
break;
case AvsCmdState::BadArguments:
WARNING_LOG() << "AvsCmdState::BadArguments";
break;
case AvsCmdState::CommandNotStateValid:
WARNING_LOG() << "AvsCmdState::CommandNotStateValid";
break;
case AvsCmdState::KeepAlive:
DEBUG_LOG() << "AvsCmdState::KeepAlive";
break;
default:
break;
}
if (!bOk)
{
// ToDo: Fehlermeldung an ServiceManagement senden
}
} // end of onAvsCmdState()
//-----------------------------------------------------------------------------
void MainHandler::onAvsKeepAliveTimeout()
{
// ToDo: Fehlermeldung an ServiceManagement senden
WARNING_LOG() << "AVS KeepAlive timeout !";
} // end of onAvsKeepAliveTimeout()
//-----------------------------------------------------------------------------
void MainHandler::onSendKeepAlive()
{
QString cmd(QLatin1String("KEEPALIVE"));
QByteArray qba = cmd.toLatin1();
qba += "\r\n";
m_avsIf->sendCommand(qba);
} // end of onSendKeepAlive()
//-----------------------------------------------------------------------------