#pragma once #include "messagebasic_global.h" #include #include #include #include #define NAME(v) #v #define DOUBLE_SAVE(u) obj[NAME(u)] = u #define DOUOBLE_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 { private: uint64_t _from_id = 0, _to_id = 0; QString _topic_string; public: AbstractMessage(const QString& topic); 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; }; /// /// 推演请求 /// struct MESSAGEBASIC_EXPORT DeduceRequest : public AbstractMessage { DeduceRequest(); }; /// /// 默认的无返回消息的处理过程通用返回消息 /// 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; }; /// /// 时间同步消息 /// struct MESSAGEBASIC_EXPORT SyncRequest : public AbstractMessage { double _time_current; SyncRequest(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; // 体积盒可视化插件定义消息 ======================================================= /// /// 获取体积盒详细数据 /// struct MESSAGEBASIC_EXPORT Get3DBox : public AbstractMessage { Get3DBox(); }; /// /// 姿态数据结构定义 /// struct Posture { double _azimuth_deg = 0; double _pitch_deg = 0; double _roll_deg = 0; }; /// /// 三维数据结构定义 /// struct D3Data { double _length_m = 0; double _width_m = 0; double _height_m = 0; }; /// /// 体积盒详细数据定义 /// struct MESSAGEBASIC_EXPORT Box3DDesc : public AbstractMessage { D3Data _d3_data; Posture _posture_d3; LLAPos _lla_pos; Box3DDesc(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; // 实体构造消息定义 ========================================== /// /// 查询系统重的组件类型和实体类型 /// struct MESSAGEBASIC_EXPORT TypesQuery : public AbstractMessage { TypesQuery(); }; /// /// 返回系统内所有的组件类型和实体模板类型 /// struct MESSAGEBASIC_EXPORT TypesQueryResult : public AbstractMessage { QStringList _component_types; QHash _entity_templets; TypesQueryResult(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; /// /// 操作类型 /// enum class EntityOperateType { NEW, DELETE, MODIFY }; /// /// 模板操作支持增、删、改 /// 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; }; /// /// 实体构造操作 /// 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; }; /// /// 获取所有实体句柄 /// struct MESSAGEBASIC_EXPORT EntityTotalGet : public AbstractMessage { EntityTotalGet(); }; /// /// 所有实体列表 /// struct MESSAGEBASIC_EXPORT EntityTotalList : public AbstractMessage { QList _entities_list; EntityTotalList(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; // componoents_desc =================================== /// /// 获取指定实体的所有组件数据 /// struct MESSAGEBASIC_EXPORT ComponentInfosQuery : public AbstractMessage { uint64_t _bind_entity_id = 0; ComponentInfosQuery(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; struct MESSAGEBASIC_EXPORT ComponentInfoQueryResult : public AbstractMessage { QJsonObject _entity_json; ComponentInfoQueryResult(); // 通过 WsMessage 继承 void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; };