Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/OcSituationServer/central_aes_data_queue.h
T
torstenandCopilot 7a6be7474e Qt6 migration: Fix BUILD_RTI=OFF build errors in TrainingAreaBase
- training_area_telegrams.cpp: Fixed QJsonObject initializer syntax (Qt6 requires {{}} not ({}))
- training_area_telegrams.cpp: Fixed fromJson() methods to access m_* members directly
- training_area_telegrams.cpp: Fixed brace mismatches in multiple toJson() methods
- training_area_telegrams.h: Changed Header struct to public members for consistency
- tx_mixin.cpp: Fixed getEquipmentNumber() template for direct member access
- lts_coordinate.cpp: Added missing #include <iomanip>
- MIGRATION_STATUS.md: Added migration progress tracking document

C++17 constraint enforced due to RTI Connext DDS 7.7.0 incompatibility with C++20+

Build status: BUILD_RTI=OFF successful (0 errors, warnings only)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-23 20:49:23 +02:00

96 lines
3.3 KiB
C++
Executable File

/**
* Manages central aes data to be sent
* $Id: handler_oc_situation_data.h 57655 2022-07-20 11:38:28Z karwat $
* $HeadURL: svn://192.168.133.21/TDS/branches/product/features/3dws_devel/Lts/Services/OcSituationServer/handler_oc_situation_data.h $
* $Author: karwat $
* Created by Hannes Fritsche, SLTE, 16-08-2022
*/
#pragma once
#include <QQueue>
#include "oc_situation.h"
#include <QtCore/QObject>
#include "logger.h"
#include <QtCore/QMutex>
#include <QtCore/QMutexLocker>
#include "central_aes_data_builder.h"
namespace OcSituationServer
{
class CentralAesDataQueue : public QObject
{
Q_OBJECT
public:
explicit CentralAesDataQueue(QObject *parent = nullptr);
template <typename T>
void addAesItem(const T &aesItem)
{
QMutexLocker locker(&m_accessMutex);
QByteArray data;
bool isPrioritized = false; // we prioritize every single fire
clearSpecificMessage(aesItem.id(), OcSituation::AddMod);
DataBuilder::addCentralAesChangeType(data, OcSituation::AddMod);
data.append(DataBuilder::getByteStreamAesItem(aesItem, isPrioritized));
if (isPrioritized)
m_internalPrioritizedQueue.enqueue({aesItem.id(), OcSituation::AddMod, data});
else
m_internalQueue.enqueue({aesItem.id(), OcSituation::AddMod, data});
DEBUG_LOG(m_logger) << "New AesItem added. " << m_internalQueue.size() << " normal, "
<< m_internalPrioritizedQueue.size() << " prioritized and "
<< m_internalQueue.size() + m_internalPrioritizedQueue.size() << " messages in total.";
}
void addRemoveMessage(int32_t aesItemId, AreaEffectSimulation::AesType aesType, bool isPrioritized = false);
void addRemoveMessage(const AreaEffectSimulation::EffectCluster &effectCluster);
void addRemoveMessage(const AreaEffectSimulation::NContamination &nContamination);
void addRemoveMessage(const AreaEffectSimulation::BCContamination &bCContamination);
void addRemoveMessage(const AreaEffectSimulation::ExplosionArea &explosionArea);
void addRemoveMessage(const AreaEffectSimulation::ExplosionSingle &explosionSingle);
void addRemoveMessage(const AreaEffectSimulation::MineArea &mineArea);
void addRemoveMessage(const AreaEffectSimulation::FunctionalArea &functionalArea);
void addRemoveMessage(const AreaEffectSimulation::BoobyTrap &boobyTrap);
void addRemoveMessage(const AreaEffectSimulation::OffRouteMine &offRouteMine);
void addRemoveMessage(const AreaEffectSimulation::ExplosionCluster &explosionCluster);
QByteArray getSendingData(qint32 size);
bool hasMessages() const;
void clear();
private:
void clearSpecificMessage(int32_t aesItemId, OcSituation::CentralAesChangeType changeType);
struct SendingMessage
{
int32_t aesItemId;
OcSituation::CentralAesChangeType changeType;
QByteArray data;
SendingMessage()
: aesItemId(0)
, changeType(OcSituation::AddMod)
, data(QByteArray())
{}
SendingMessage(int32_t aesItemId, OcSituation::CentralAesChangeType changeType, const QByteArray &data)
: aesItemId(aesItemId)
, changeType(changeType)
, data(data)
{}
};
// attributes
QMutex m_accessMutex;
QQueue<SendingMessage> m_internalQueue;
QQueue<SendingMessage> m_internalPrioritizedQueue;
LOGGER_T &m_logger;
};
} // namespace OcSituationServer