Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+173
@@ -0,0 +1,173 @@
|
||||
/**
|
||||
* Telegrams toJSON
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Norbert Thoden, NLE, 2020-06-29
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <exception>
|
||||
#include <QJsonObject>
|
||||
#include <QString>
|
||||
|
||||
#include <Services/TargetManagement/tgt_dtc.h>
|
||||
|
||||
|
||||
|
||||
namespace TargetManagement
|
||||
{
|
||||
|
||||
class JsonException final : public std::exception
|
||||
{
|
||||
public:
|
||||
JsonException(const QJsonObject &obj, const QString &key);
|
||||
const char *what() const noexcept override { return m_what.data(); }
|
||||
private:
|
||||
QJsonObject m_obj;
|
||||
QString m_key;
|
||||
QByteArray m_what;
|
||||
};
|
||||
template <typename T>
|
||||
struct Constraints;
|
||||
|
||||
|
||||
//
|
||||
// Enumerations
|
||||
//
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Structs
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
struct Target
|
||||
{
|
||||
virtual ~Target() = default;
|
||||
virtual QJsonObject toJson() const = 0;
|
||||
virtual QString type() const = 0;
|
||||
};
|
||||
|
||||
struct GeoPosition2D
|
||||
{
|
||||
GeoPosition2D() = default;
|
||||
explicit GeoPosition2D(const Core::GeoPosition2D pos)
|
||||
: lat(pos.lat()), lon(pos.lon()) {}
|
||||
|
||||
double lat = 0; // in degree, WGS-84
|
||||
double lon = 0; // in degree, WGS-84
|
||||
|
||||
static GeoPosition2D fromJson(const QJsonObject &obj);
|
||||
QJsonObject toJson() const;
|
||||
|
||||
// Core::GeoPosition2D toCoreGeoPosition2D() const { return {lon, lat}; }
|
||||
|
||||
};
|
||||
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
template <typename T>
|
||||
struct TargetBaseTmpl : Target
|
||||
{
|
||||
QString type() const override final { return Constraints<T>::type(); }
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
struct ShootbackTargetData final : public TargetBaseTmpl<ShootbackTargetData>
|
||||
{
|
||||
// use simple members and not generated dds struct to be independent
|
||||
|
||||
int32_t id{-1};
|
||||
int32_t targetDataId{-1};
|
||||
QString name;
|
||||
int32_t targetParticipantEquipmentNumber{-1};
|
||||
bool activateLaserDesignation{false};
|
||||
bool permanentInstalledTarget{false};
|
||||
bool activateLights{false};
|
||||
int32_t hitsToKill{-1};
|
||||
bool activatePopupAutomatic{false};
|
||||
|
||||
// conversion functions
|
||||
QJsonObject toJson() const override;
|
||||
static ShootbackTargetData fromJson(const QJsonObject &obj);
|
||||
};
|
||||
template <> struct Constraints<ShootbackTargetData>
|
||||
{
|
||||
static QString type() { return QStringLiteral("ShootbackTargetData"); }
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
struct ShootbackAreaData final : public TargetBaseTmpl<ShootbackAreaData>
|
||||
{
|
||||
// use simple members and not generated dds struct to be independent
|
||||
|
||||
int32_t id{-1};
|
||||
QString name;
|
||||
|
||||
GeoPosition2D position;
|
||||
double width{.0};
|
||||
double height{.0};
|
||||
|
||||
// conversion functions
|
||||
QJsonObject toJson() const override;
|
||||
static ShootbackAreaData fromJson(const QJsonObject &obj);
|
||||
};
|
||||
template <> struct Constraints<ShootbackAreaData>
|
||||
{
|
||||
static QString type() { return QStringLiteral("ShootbackAreaData"); }
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
struct ShootbackConfigurationData final : public TargetBaseTmpl<ShootbackConfigurationData>
|
||||
{
|
||||
// use simple members and not generated dds struct to be independent
|
||||
|
||||
int interval1{-1};
|
||||
bool flash1{false};
|
||||
TargetManagement::Effect effect1{TargetManagement::Effect_def::NearMiss};
|
||||
|
||||
int interval2{-1};
|
||||
bool flash2{false};
|
||||
TargetManagement::Effect effect2{TargetManagement::Effect_def::NearMiss};
|
||||
|
||||
// conversion functions
|
||||
QJsonObject toJson() const override;
|
||||
static ShootbackConfigurationData fromJson(const QJsonObject &obj);
|
||||
};
|
||||
template <> struct Constraints<ShootbackConfigurationData>
|
||||
{
|
||||
static QString type() { return QStringLiteral("ShootbackConfigurationData"); }
|
||||
};
|
||||
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
struct TargetAreaAssignmentData final : public TargetBaseTmpl<TargetAreaAssignmentData>
|
||||
{
|
||||
// use simple members and not generated dds struct to be independent
|
||||
|
||||
int32_t id{-1};
|
||||
QString name;
|
||||
|
||||
int areaId;
|
||||
int targetParticipantId;
|
||||
|
||||
ShootbackConfigurationData configuration;
|
||||
|
||||
bool isActive{false};
|
||||
|
||||
// conversion functions
|
||||
QJsonObject toJson() const override;
|
||||
static TargetAreaAssignmentData fromJson(const QJsonObject &obj);
|
||||
};
|
||||
template <> struct Constraints<TargetAreaAssignmentData>
|
||||
{
|
||||
static QString type() { return QStringLiteral("TargetAreaAssignmentData"); }
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user