SimsWorld/MessageBasic/messagebasic.h

270 lines
6.5 KiB
C++

#pragma once
#include "messagebasic_global.h"
#include <simsbasic.h>
#include <standardglobe.h>
#include <QStringList>
#include <QHash>
#define NAME(v) #v
#define DOUBLE_SAVE(u) obj[NAME(u)] = u
#define DOUBLE_PEAK(u) u = obj[NAME(u)].toDouble()
#define UINT64_SAVE(u) obj[NAME(u)] = QJsonValue::fromVariant(QVariant::fromValue(u))
#define UINT64_PEAK(u) u = obj[NAME(u)].toVariant().toULongLong()
#define STRING_SAVE(u) obj[NAME(u)] = u
#define STRING_PEAK(u) u = obj[NAME(u)].toString()
#define STRLIST_SAVE(u) obj[NAME(u)] = u.join(",")
#define STRLIST_PEAK(u) u = obj[NAME(u)].toString().split(",")
class MESSAGEBASIC_EXPORT AbstractMessage : public WsMessage {
protected:
uint64_t _from_id = 0, _to_id = 0;
QString _topic_string;
AbstractMessage(const QString& topic);
public:
virtual ~AbstractMessage() = default;
void reset(uint64_t from, uint64_t to);
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
QString topicString() const override;
uint64_t targetEntity() const override;
uint64_t sourceEntity() const override;
};
/// <summary>
/// 推演请求
/// </summary>
struct MESSAGEBASIC_EXPORT DeduceRequest : public AbstractMessage {
DeduceRequest();
};
/// <summary>
/// 默认的无返回消息的处理过程通用返回消息
/// </summary>
struct MESSAGEBASIC_EXPORT RespondDefault : public AbstractMessage {
double _time_consume;
bool _success_mark = false;
QString _reason_text = "";
RespondDefault();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 时间同步消息
/// </summary>
struct MESSAGEBASIC_EXPORT SyncRequest : public AbstractMessage {
double _time_current;
SyncRequest();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// 体积盒可视化插件定义消息 =======================================================
/// <summary>
/// 获取体积盒详细数据
/// </summary>
struct MESSAGEBASIC_EXPORT Get3DBox : public AbstractMessage {
Get3DBox();
};
/// <summary>
/// 姿态数据结构定义
/// </summary>
struct Posture {
double _azimuth_deg = 0;
double _pitch_deg = 0;
double _roll_deg = 0;
};
/// <summary>
/// 三维数据结构定义
/// </summary>
struct VolumeData {
double _length_m = 0;
double _width_m = 0;
double _height_m = 0;
};
/// <summary>
/// 体积盒详细数据定义
/// </summary>
struct MESSAGEBASIC_EXPORT Box3DDesc : public AbstractMessage {
VolumeData _d3_data;
Posture _posture_d3;
LonLatAlt _lla_pos;
Box3DDesc();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
struct MESSAGEBASIC_EXPORT Set3DBoxD3Data : public AbstractMessage {
VolumeData _d3_data;
Set3DBoxD3Data();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
struct MESSAGEBASIC_EXPORT Set3DBoxPosture : public AbstractMessage
{
Posture _posture_d3;
Set3DBoxPosture();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
struct MESSAGEBASIC_EXPORT Set3DBoxLLAPos : public AbstractMessage
{
LonLatAlt _lla_pos;
Set3DBoxLLAPos();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// 实体构造消息定义 ==========================================
/// <summary>
/// 查询系统重的组件类型和实体类型
/// </summary>
struct MESSAGEBASIC_EXPORT TypesQuery : public AbstractMessage {
TypesQuery();
};
/// <summary>
/// 返回系统内所有的组件类型和实体模板类型
/// </summary>
struct MESSAGEBASIC_EXPORT TypesQueryResult : public AbstractMessage {
QStringList _component_types;
QHash<QString, uint64_t> _entity_templets;
TypesQueryResult();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 操作类型
/// </summary>
enum class EntityOperateType {
NEW, DELETE, MODIFY
};
/// <summary>
/// 模板操作支持增、删、改
/// </summary>
struct MESSAGEBASIC_EXPORT TempletOperate : public AbstractMessage {
uint64_t _operate_code = (uint64_t)EntityOperateType::NEW;
QString _template_name = "";
uint64_t _template_id_within_0x2ff_0xffff = 0x2ff;
TempletOperate();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 实体构造操作
/// </summary>
struct MESSAGEBASIC_EXPORT EntityOperate : public AbstractMessage {
uint64_t _operate_code = (uint64_t)EntityOperateType::NEW;
QString _template_name = "";
QString _entity_name = "";
uint64_t _entity_id_over_0xffff = 0xffff;
EntityOperate();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
struct MESSAGEBASIC_EXPORT ComponentOperate : public AbstractMessage {
uint64_t _entity_id_within_0x2ff_0xffffffffffffffff = 0x2ff;
QStringList _component_types;
ComponentOperate();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 获取所有实体句柄
/// </summary>
struct MESSAGEBASIC_EXPORT EntityTotalGet : public AbstractMessage {
EntityTotalGet();
};
/// <summary>
/// 所有实体列表
/// </summary>
struct MESSAGEBASIC_EXPORT EntityTotalList : public AbstractMessage {
QList<uint64_t> _entities_list;
EntityTotalList();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// componoents_desc ===================================
/// <summary>
/// 获取指定实体的所有组件数据
/// </summary>
struct MESSAGEBASIC_EXPORT ComponentDatasQuery : public AbstractMessage {
ComponentDatasQuery();
};
struct MESSAGEBASIC_EXPORT ComponentDatasQueryResult : public AbstractMessage {
QJsonObject _entity_json;
ComponentDatasQueryResult();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
struct MESSAGEBASIC_EXPORT ProcedureSignatureQuery : public AbstractMessage {
ProcedureSignatureQuery();
};
struct MESSAGEBASIC_EXPORT ProcedureSignatureQueryResult : public AbstractMessage
{
QList<WsRespondSignatureType> _signature_list;
ProcedureSignatureQueryResult();
// 通过 WsMessage 继承
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};