Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Common/LtsSession/lts_session_data_dds.h
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

348 lines
11 KiB
C++
Executable File

#pragma once
#include <QObject>
#include <QMap>
#include <QUrl>
#include <memory>
#include <DDS/Core/core_dtc_types.h>
#include <NGLLogger/NGLLoggerBootstrap.h>
#include <Common/ProjectConfig/project_defines.h>
#include "ltssessiondatadds_export.h"
namespace DataPluginBase { class Interface; }
namespace DDSConnector { class DdsConnector; }
namespace GuiPluginBase { class Interface; }
namespace LtsSession
{
struct DdsConnectionParams
{
int domainId = -1;
int partitionId = 0;
int exerciseId = 0;
IDL::PartitionType partitionType = IDL::PartitionType::Any;
QUrl tcpConnectionUrl;
QStringList qos_file;
DdsConnectionParams() = default;
explicit DdsConnectionParams(const Core::ReplayPartition &rp)
: domainId(rp.domainId())
, partitionId(rp.id())
, exerciseId(rp.exerciseId())
, partitionType(IDL::PartitionType::Replay)
{
setTcpConnectionUrl(rp.tcpConnectionUrl());
}
bool isValid() const { return domainId >= 0 && partitionType != IDL::PartitionType::Any; }
bool hasSameDomainParams(const DdsConnectionParams &o) const
{
return domainId == o.domainId &&
tcpConnectionUrl == o.tcpConnectionUrl;
}
bool operator==(const DdsConnectionParams &o) const
{
return domainId == o.domainId &&
partitionId == o.partitionId &&
exerciseId == o.exerciseId &&
qos_file == o.qos_file &&
partitionType == o.partitionType &&
tcpConnectionUrl == o.tcpConnectionUrl;
}
bool operator !=(const DdsConnectionParams &o) const
{
return !operator==(o);
}
bool operator <(const DdsConnectionParams &o) const
{
if (domainId != o.domainId)
return domainId < o.domainId;
if (partitionId != o.partitionId)
return partitionId < o.partitionId;
if (exerciseId != o.exerciseId)
return exerciseId < o.exerciseId;
if (qos_file != o.qos_file)
return qos_file < o.qos_file;
if (partitionType != o.partitionType)
return partitionType < o.partitionType;
return tcpConnectionUrl.toString() < o.tcpConnectionUrl.toString();
}
void setTcpConnectionUrl(const std::string &url)
{
tcpConnectionUrl = QUrl::fromUserInput(QString::fromStdString(url));
}
};
class Fetcher;
class LTSSESSIONDATADDS_EXPORT LtsSessionDataDds
: public QObject
{
Q_OBJECT
protected:
explicit LtsSessionDataDds(QObject *parent = nullptr);
public:
~LtsSessionDataDds();
bool init(const DdsConnectionParams &connParams);
bool init(const dds::domain::DomainParticipant &dp,
const DdsConnectionParams &connParams);
std::shared_ptr<DDSConnector::DdsConnector> ddsConnector() { return m_ddsConnector; }
std::shared_ptr<DDSConnector::DdsConnector> ddsConnectorGlobal() { return m_ddsConnectorGlobal; }
int domainId() const;
int exerciseId() const;
int partitionId() const;
QStringList qosFile() const;
IDL::PartitionType partitionType() const;
static QString partitionTypeString(IDL::PartitionType partitionType);
bool isExercisePartition() const { return (partitionType() == IDL::PartitionType::Exercise); }
bool isReplayPartition() const { return (partitionType() == IDL::PartitionType::Replay); }
QString toString() const;
Fetcher *fetcher(const QString &yourPluginsName);
QUrl tcpConnectionUrl() const;
DdsConnectionParams connParams() const;
qint64 partitionTime() const { return m_curMSecSinceEpoch; }
template<typename T>
bool createTopicClient(std::shared_ptr<T> &member, bool bEnableAll = false, bool bGlobal = false)
{
member = T::create(bGlobal ? m_ddsConnectorGlobal : m_ddsConnector);
if ( bEnableAll && !member->enableAll())
{
member = nullptr;
ERROR_LOG() << "Error initializing dtc/ftc for service " << T::identifier();
return false;
}
return true;
}
template<typename T, typename S>
bool createTopicClient(std::shared_ptr<T> &dtc, std::shared_ptr<S> &ftc, bool bEnableAll = false, bool bGlobal = false)
{
dtc = T::create(bGlobal ? m_ddsConnectorGlobal : m_ddsConnector);
ftc = S::create(bGlobal ? m_ddsConnectorGlobal : m_ddsConnector);
if ( (bEnableAll && !dtc->enableAll()) || !ftc->enableAll())
{
dtc = nullptr;
ftc = nullptr;
ERROR_LOG() << "Error initializing dtc/ftc for service " << T::identifier();
return false;
}
return true;
}
template<typename T, typename S>
bool getDtc(std::shared_ptr<S> &val) const
{
for (const auto &i : m_dataPluginInterfaces)
{
auto ifc = std::dynamic_pointer_cast<T>(i);
if (ifc)
{
val = ifc->getDtc();
return val != nullptr;
}
}
val.reset();
DEBUG_LOG() << "Trying to load dtc " << typeid(T).name() << " - " << typeid(S).name() << " failed!"
<< ", m_dataPluginInterfaces.size() = " << m_dataPluginInterfaces.size() << " - " << this;
return false;
}
template<typename T, typename S>
bool getFtc(std::shared_ptr<S> &val) const
{
for (const auto &i : m_dataPluginInterfaces)
{
auto ifc = std::dynamic_pointer_cast<T>(i);
if (ifc)
{
val = ifc->getFtc();
return val != nullptr;
}
}
val.reset();
DEBUG_LOG() << "Trying to load ftc " << typeid(T).name() << " - " << typeid(S).name() << " failed!"
<< ", m_dataPluginInterfaces.size() = " << m_dataPluginInterfaces.size() << " - " << this;
return false;
}
template<typename T, typename S>
bool getForeignDataInterface(std::shared_ptr<S> &val) const
{
for (const auto &i : m_dataPluginInterfaces)
{
auto ifc = std::dynamic_pointer_cast<T>(i);
if (ifc)
{
val = ifc->getForeignDataInterface();
return val != nullptr;
}
}
val.reset();
DEBUG_LOG() << "Trying to load foreign data ifc " << typeid(T).name() << " - " << typeid(S).name() << " failed!"
<< ", m_dataPluginInterfaces.size() = " << m_dataPluginInterfaces.size() << " - " << this;
return false;
}
template<typename S>
bool getForeignDataInterface_NEW(std::shared_ptr<S> &val) const
{
for (const auto &i : m_dataPluginInterfaces)
{
val = std::dynamic_pointer_cast<S>(i);
if (val)
return true;
}
val.reset();
DEBUG_LOG() << "Trying to load foreign data ifc " << typeid(S).name() << " failed!"
<< ", m_guiPluginInterfaces.size() = " << m_guiPluginInterfaces.size() << " - " << this;
return false;
}
template<typename S>
bool getForeignGuiInterface(std::shared_ptr<S> &val) const
{
for (const auto &i : m_guiPluginInterfaces)
{
val = std::dynamic_pointer_cast<S>(i);
if (val)
return true;
}
val.reset();
DEBUG_LOG() << "Cannot find foreign gui ifc " << typeid(S).name() << " in " << toString();
return false;
}
template<typename T, typename S>
bool interfaceFromGui(std::shared_ptr<S> &val) const
{
for (const auto &i : m_guiPluginInterfaces)
{
val = std::dynamic_pointer_cast<T>(i);
if (val)
return true;
}
val.reset();
DEBUG_LOG() << "Trying to load foreign gui ifc #2 " << typeid(S).name() << " failed!"
<< ", m_guiPluginInterfaces.size() = " << m_guiPluginInterfaces.size() << " - " << this;
return false;
}
signals:
void partitionTimeChanged(qint64 newPartitionTime);
void partitionTimeChangedInternal();
private:
void onPartitionTimeChangedInternal();
bool initInternal();
protected:
std::shared_ptr<DDSConnector::DdsConnector> m_ddsConnector;
std::shared_ptr<DDSConnector::DdsConnector> m_ddsConnectorGlobal;
int m_exerciseId;
std::shared_ptr<DTC::PartitionTime> m_dtcPartitionTime;
qint64 m_emittedTime;
qint64 m_curMSecSinceEpoch;
bool m_active;
void setInactive() { m_active = false; }
QMap<QString, std::shared_ptr<DataPluginBase::Interface>> availableDataPluginInterfaces() const;
void addAvailablaeDataPluginInterfaces(const QMap<QString, std::shared_ptr<DataPluginBase::Interface>> &dataPlugins);
QMap<QString, std::shared_ptr<DataPluginBase::Interface>> m_dataPluginInterfaces;
QMap<QString, std::shared_ptr<GuiPluginBase::Interface>> m_guiPluginInterfaces;
QMap<QString, std::shared_ptr<GuiPluginBase::Interface>> m_initializeThesePlugins;
Fetcher *m_fetcher;
QStringList m_qosFileList;
};
class Fetcher
{
public:
Fetcher(LtsSessionDataDds *sessionDataDds, const QString &caller)
: m_sessionDataDds(sessionDataDds)
, m_errors(false)
, m_caller(caller)
, m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("LtsSession.Fetcher"))
, m_optional(false)
{
}
LtsSessionDataDds *m_sessionDataDds;
bool m_errors;
QString m_caller;
QString m_whatWillNotWork;
bool m_optional;
QString m_resultType;
QString m_getterFunctionType;
template <typename ForeignGuiInterface>
void getForeignGuiInterface(std::shared_ptr<ForeignGuiInterface> &foreignGuiInterface, const QString &whatWillNotWork , bool optional)
{
if (!m_sessionDataDds->getForeignGuiInterface(foreignGuiInterface))
{
m_whatWillNotWork = whatWillNotWork;
m_optional = optional;
m_resultType = QString::fromUtf8(typeid(ForeignGuiInterface).name());
m_getterFunctionType = QStringLiteral("gui interface");
print();
}
}
bool status() const
{
return !m_errors;
}
void print()
{
m_errors = true;
QString msg(QStringLiteral("%1 cannot find '%2' in %3 %4"));
if (m_optional)
{
INFO_LOG() << msg.arg(m_caller, m_resultType, m_sessionDataDds->toString(), QStringLiteral("' - optional but %1 will not work").arg(m_whatWillNotWork));
}
else
{
ERROR_LOG() << msg.arg(m_caller, m_resultType, m_sessionDataDds->toString(), QStringLiteral(" which is required"));
}
}
};
}