Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/handler_active_apps.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

174 lines
4.4 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#include "handler_active_apps.h"
#include <utility>
#include "dds_handler.h"
#include "main_handler.h"
namespace OperatorManagement
{
HandlerActiveApps::HandlerActiveApps(MainHandler *mainHandler)
: Interface::Fts::ActiveAppUpdateRequestHandler(mainHandler->dds()->fts())
, Interface::Fts::ActiveAppRemoveRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
{
}
HandlerActiveApps::~HandlerActiveApps()
{
cleanup();
}
bool HandlerActiveApps::init()
{
// cleanup();
// broadcast startUpRequest
// (all apps should re-register)
ActiveApp startUpRequest(0, -1, -1, -1, -1, -1, 0);
activeAppUpdateRequest(startUpRequest);
return true;
}
void HandlerActiveApps::cleanupOperator(int operatorId)
{
INFO_LOG() << "cleanupOperator operatorId: " << operatorId
<< ", m_activeApps.size = " << m_activeApps.size();
// Operator has logged in or out or WS is not alive anymore:
auto dtsPtr = dts();
auto it = m_activeApps.begin();
while (it != m_activeApps.end())
{
const ActiveApp &item = it.value();
if (item.operatorId() == operatorId)
{
INFO_LOG() << "cleanupOperator operatorId: " << operatorId << " ActiveApp=" << item;
dtsPtr->removeActiveAppByKey(item.id());
it = m_activeApps.erase(it);
}
else
{
++it;
}
} // while
}
void HandlerActiveApps::cleanup()
{
auto dtsPtr = dts();
for (const ActiveApp &item : std::as_const(m_activeApps))
dtsPtr->removeActiveAppByKey(item.id());
m_activeApps.clear();
}
void HandlerActiveApps::removeZombieEntry(const ActiveApp &request)
{
for (auto it = m_activeApps.begin(); it != m_activeApps.end(); ++it)
{
const ActiveApp &item = it.value();
if ((item.operatorId() == request.operatorId()) &&
(item.screenId() == request.screenId()))
{
dts()->removeActiveAppByKey(item.id());
m_activeApps.erase(it);
break;
}
} // while
}
void HandlerActiveApps::onActiveAppUpdateRequest(const rti::core::SampleIdentity &cookie,
const ActiveApp &request)
{
DEBUG_LOG() << "onActiveAppUpdateRequest: " << request;
auto ret = activeAppUpdateRequest(request);
if (ret.error())
WARNING_LOG() << ret();
DEBUG_LOG() << "onActiveAppUpdateRequest - returned id: " << ret.id();
fts()->activeAppUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerActiveApps::activeAppUpdateRequest(const ActiveApp &request)
{
const int reqId = request.id();
// handle 'remove' :
if (request.appId() < 0) // LtsSession::App::Login is -1 but ok
{
Core::RemoveElementRequest removeRequest;
removeRequest.id(reqId);
return activeAppRemoveRequest(removeRequest);
}
// : handle 'remove'
auto it = m_activeApps.find(reqId);
if (it == m_activeApps.end())
{
static int s_idCounter = 99;
// new entry
removeZombieEntry(request);
it = m_activeApps.insert(++s_idCounter, request);
it.value().id(s_idCounter);
}
else
{
// already exists
if (it.value() == request)
{
// identical value, already registered:
return Core::FunctionReplyObject(reqId);
}
// copy data
it.value() = request;
}
DEBUG_LOG() << "onActiveAppUpdateRequest - publish new data: " << it.value();
dts()->publish(it.value());
return Core::FunctionReplyObject(it.value().id());
}
void HandlerActiveApps::onActiveAppRemoveRequest(const rti::core::SampleIdentity &cookie,
const Core::RemoveElementRequest &request)
{
DEBUG_LOG() << "onActiveAppRemoveRequest: " << request;
auto ret = activeAppRemoveRequest(request);
if (ret.error())
WARNING_LOG() << ret();
fts()->activeAppRemoveReply(cookie, ret);
}
Core::FunctionReplyObject HandlerActiveApps::activeAppRemoveRequest(const Core::RemoveElementRequest &request)
{
const int reqId = request.id();
if (m_activeApps.remove(reqId) <= 0)
return Core::FunctionReplyObject(reqId, tr_lts("dds", "ActiveApp with id %1 not found")).arg(reqId);
dts()->removeActiveAppByKey(reqId);
return Core::FunctionReplyObject(reqId);
}
std::shared_ptr<Interface::Dts> HandlerActiveApps::dts() const
{
return m_mainHandler->dds()->dts();
}
std::shared_ptr<Interface::Fts> HandlerActiveApps::fts() const
{
return m_mainHandler->dds()->fts();
}
} // namespace FilterManagement