添加MessageLoader和newDefault

This commit is contained in:
codeboss 2025-06-28 08:26:10 +08:00
parent a6ccb3e97d
commit 8713278878
5 changed files with 61 additions and 10 deletions

View File

@ -46,7 +46,25 @@ MessageLoader::MessageLoader()
_message_types << std::make_shared<PlainRouteReset>();
}
QList<std::shared_ptr<WsMessage>> MessageLoader::allType() const
#include <QMutexLocker>
QList<QString> MessageLoader::allType() const
{
return _message_types;
QMutexLocker o(&const_cast<MessageLoader*>(this)->_type_mutex);
QList<QString> keys;
std::transform(_message_types.begin(), _message_types.end(), std::back_inserter(keys),
[](std::shared_ptr<WsMessage> ins) { return ins->topicString(); });
return keys;
}
std::shared_ptr<WsMessage> MessageLoader::makeDefault(const QString& topic) const
{
QMutexLocker o(&const_cast<MessageLoader*>(this)->_type_mutex);
for(auto it : this->_message_types)
if(it->topicString() == topic)
return std::dynamic_pointer_cast<WsMessage>(it->newDefault());
return nullptr;
}

View File

@ -1,14 +1,17 @@
#pragma once
#include "messagebasic.h"
#include <QMutex>
class MESSAGEBASIC_EXPORT MessageLoader
{
private:
QList<std::shared_ptr<WsMessage>> _message_types;
QMutex _type_mutex;
public:
MessageLoader();
QList<std::shared_ptr<WsMessage>> allType() const;
QList<QString> allType() const;
std::shared_ptr<WsMessage> makeDefault(const QString &topic) const;
};

View File

@ -29,7 +29,7 @@ SyncRequest::SyncRequest()
std::shared_ptr<TopicData> SyncRequest::newDefault() const
{
return std::make_shared<SyncRequest>();
return std::make_shared<SyncRequest>();
}
void SyncRequest::recoveryFrom(const QJsonObject& obj)
@ -51,7 +51,7 @@ RespondDefault::RespondDefault()
std::shared_ptr<TopicData> RespondDefault::newDefault() const
{
return std::make_shared<RespondDefault>();
return std::make_shared<RespondDefault>();
}
void RespondDefault::recoveryFrom(const QJsonObject& obj)
@ -404,3 +404,21 @@ void Set3DBoxLLAPos::saveTo(QJsonObject& obj) const
DOUBLE_SAVE(_lla_pos._lat_deg);
DOUBLE_SAVE(_lla_pos._alt_m);
}
EntityInitialRequest::EntityInitialRequest()
:AbstractMessage(NAME(EntityInitialRequest)) {
}
std::shared_ptr<TopicData> EntityInitialRequest::newDefault() const
{
return std::make_shared<EntityInitialRequest>();
}
EntityPreparedRequest::EntityPreparedRequest()
:AbstractMessage(NAME(EntityPreparedRequest)) {
}
std::shared_ptr<TopicData> EntityPreparedRequest::newDefault() const
{
return std::make_shared<EntityPreparedRequest>();
}

View File

@ -6,7 +6,7 @@
#include <QStringList>
#include <QHash>
#define NAME(v) #v
#define NAME(v) QString(#v).replace(".","_").replace("->","_")
#define DOUBLE_SAVE(u) obj[NAME(u)] = u
#define DOUBLE_PEAK(u) u = obj[NAME(u)].toDouble()
@ -76,3 +76,19 @@ struct MESSAGEBASIC_EXPORT RespondDefault : public AbstractMessage {
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 实体初始化消息
/// </summary>
struct MESSAGEBASIC_EXPORT EntityInitialRequest : public AbstractMessage {
EntityInitialRequest();
std::shared_ptr<TopicData> newDefault() const override;
};
/// <summary>
/// 实体仿真准备消息
/// </summary>
struct MESSAGEBASIC_EXPORT EntityPreparedRequest : public AbstractMessage{
EntityPreparedRequest();
std::shared_ptr<TopicData> newDefault() const override;
};

View File

@ -63,10 +63,6 @@ void PlatformMotionSequence::saveTo(QJsonObject& obj) const
}
#include <standardglobe.h>
#define PI 3.14159265354
auto deg2a = [](double v) { return v / 180.0 * PI; };
auto rad2d = [](double v) { return v / PI * 180.0; };
#include <QVector2D>
#include <cmath>
StrightLineMotion::StrightLineMotion()