#pragma once #include "messagebasic_global.h" #include #include #include #include #define NAME(v) QString(#v).replace(".","_").replace("->","_") #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; }; /// /// 时间同步消息 /// struct MESSAGEBASIC_EXPORT SyncRequest : public AbstractMessage { double _time_current; SyncRequest(); // 通过 WsMessage 继承 std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; /// /// 推演请求 /// struct MESSAGEBASIC_EXPORT DeduceRequest : public AbstractMessage { DeduceRequest(); std::shared_ptr newDefault() const override; }; /// /// 默认的无返回消息的处理过程通用返回消息 /// struct MESSAGEBASIC_EXPORT RespondDefault : public AbstractMessage { double _time_consume; bool _success_mark = false; QString _reason_text = ""; RespondDefault(); // 通过 WsMessage 继承 std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; /// /// 实体初始化消息 /// struct MESSAGEBASIC_EXPORT EntityInitialRequest : public AbstractMessage { EntityInitialRequest(); std::shared_ptr newDefault() const override; }; /// /// 实体仿真准备消息 /// struct MESSAGEBASIC_EXPORT EntityPreparedRequest : public AbstractMessage{ EntityPreparedRequest(); std::shared_ptr newDefault() const override; };