SimsWorld/MessageBasic/messagebasic.h

142 lines
3.2 KiB
C++

#pragma once
#include "messagebasic_global.h"
#include "simsbasic.h"
#include "standardglobe.h"
#define NAME(v) #v
#define DOUBLE_SAVE(u) obj[NAME(u)] = u
#define DOUOBLE_PEAK(u) u = obj[NAME(u)].toDouble()
/// <summary>
/// 推演请求
/// </summary>
class MESSAGEBASIC_EXPORT DeduceRequest : public WsMessage {
private:
uint64_t _from_id = 0, _to_id = 0;
public:
DeduceRequest();
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>
class MESSAGEBASIC_EXPORT RespondDefault : public WsMessage {
private:
uint64_t _from_id = 0, _to_id = 0;
double _time_consume;
public:
RespondDefault();
void reset(uint64_t from, uint64_t to, double consume);
double consume() const;
// 通过 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>
class MESSAGEBASIC_EXPORT SyncRequest : public WsMessage {
private:
uint64_t _from_id = 0, _to_id = 0;
double _time_current;
public:
SyncRequest();
void reset(uint64_t from, uint64_t to, double timepoint);
// 通过 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>
class MESSAGEBASIC_EXPORT Get3DBox : public WsMessage {
private:
uint64_t _from_id = 0, _to_id = 0;
public:
Get3DBox();
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 Posture {
double _azimuth_deg = 0;
double _pitch_deg = 0;
double _roll_deg = 0;
};
/// <summary>
/// 三维数据结构定义
/// </summary>
struct D3Data{
double _length_m = 0;
double _width_m = 0;
double _height_m = 0;
};
/// <summary>
/// 体积盒详细数据定义
/// </summary>
class MESSAGEBASIC_EXPORT Box3DDesc : public WsMessage {
private:
uint64_t _from_id = 0, _to_id = 0;
D3Data _d3_data;
Posture _posture_d3;
LLAPos _lla_pos;
public:
Box3DDesc();
void setTarget(uint64_t from, uint64_t to);
void setVolume(const D3Data &d);
D3Data volume() const;
void setPosture(const Posture &p);
Posture posture() const;
void setPosition(const LLAPos &lla);
LLAPos position() const;
// 通过 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;
};