资源管理实体的路径操作机制
This commit is contained in:
parent
438820944a
commit
819bd70426
|
@ -59,6 +59,7 @@ DeduceFramework::DeduceFramework()
|
||||||
:_factory_ins(std::make_shared<ComponentFactory>()) {
|
:_factory_ins(std::make_shared<ComponentFactory>()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "RouteManage.h"
|
||||||
void DeduceFramework::init_framework()
|
void DeduceFramework::init_framework()
|
||||||
{
|
{
|
||||||
auto mgr_e = std::make_shared<RtEntityManager>();
|
auto mgr_e = std::make_shared<RtEntityManager>();
|
||||||
|
@ -70,6 +71,8 @@ void DeduceFramework::init_framework()
|
||||||
auto res_e = std::make_shared<RtResourceManager>();
|
auto res_e = std::make_shared<RtResourceManager>();
|
||||||
info_pulls = std::make_shared<ComponentsInfoPull>();
|
info_pulls = std::make_shared<ComponentsInfoPull>();
|
||||||
res_e->append(info_pulls);
|
res_e->append(info_pulls);
|
||||||
|
auto route_mgr = std::make_shared<PlainRouteManage>();
|
||||||
|
res_e->append(route_mgr);
|
||||||
this->_entity_map_over_0xffff[res_e->entityID()] = res_e;
|
this->_entity_map_over_0xffff[res_e->entityID()] = res_e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1,138 @@
|
||||||
#include "RouteManage.h"
|
#include "RouteManage.h"
|
||||||
|
|
||||||
|
PlainRouteManage::PlainRouteManage()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include <QJsonArray>
|
||||||
|
|
||||||
|
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const NewPlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out)
|
||||||
|
{
|
||||||
|
auto resp = std::make_shared<RespondDefault>();
|
||||||
|
resp->reset(in->targetEntity(), in->sourceEntity());
|
||||||
|
|
||||||
|
if(!this->_route_resource_map.contains(in->_route_name)){
|
||||||
|
resp->_success_mark = true;
|
||||||
|
this->_route_resource_map[in->_route_name] = RouteResource();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resp->_reason_text = "已包含指定名称的路径";
|
||||||
|
}
|
||||||
|
|
||||||
|
out << resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const RemovePlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out)
|
||||||
|
{
|
||||||
|
auto resp = std::make_shared<RespondDefault>();
|
||||||
|
resp->reset(in->targetEntity(), in->sourceEntity());
|
||||||
|
|
||||||
|
if (this->_route_resource_map.contains(in->_route_name)) {
|
||||||
|
resp->_success_mark = true;
|
||||||
|
this->_route_resource_map.remove(in->_route_name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resp->_reason_text = "不包含指定名称的路径";
|
||||||
|
}
|
||||||
|
|
||||||
|
out << resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteReset> in, QList<std::shared_ptr<RespondDefault>>& out)
|
||||||
|
{
|
||||||
|
auto resp = std::make_shared<RespondDefault>();
|
||||||
|
resp->reset(in->targetEntity(), in->sourceEntity());
|
||||||
|
|
||||||
|
if (this->_route_resource_map.contains(in->_route_name)) {
|
||||||
|
resp->_success_mark = true;
|
||||||
|
|
||||||
|
RouteResource res;
|
||||||
|
res._route_points = in->_lonlat_list;
|
||||||
|
this->_route_resource_map[in->_route_name] = res;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resp->_reason_text = "不包含指定名称的路径";
|
||||||
|
}
|
||||||
|
|
||||||
|
out << resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteQuery> in, QList<std::shared_ptr<PlainRouteInfo>>& out)
|
||||||
|
{
|
||||||
|
auto resp = std::make_shared<PlainRouteInfo>();
|
||||||
|
resp->reset(in->targetEntity(), in->sourceEntity());
|
||||||
|
|
||||||
|
if (this->_route_resource_map.contains(in->_route_name)) {
|
||||||
|
resp->_success_mark = true;
|
||||||
|
resp->_route_name = in->_route_name;
|
||||||
|
resp->_lonlat_list = this->_route_resource_map[in->_route_name]._route_points;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resp->_reason_text = "不包含指定名称的路径";
|
||||||
|
}
|
||||||
|
|
||||||
|
out << resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::recoveryFrom(const QJsonObject& obj)
|
||||||
|
{
|
||||||
|
auto route_array = obj["total_route"].toArray();
|
||||||
|
for (auto idx = 0; idx < route_array.size(); ++idx) {
|
||||||
|
auto track_record = route_array.at(idx).toObject();
|
||||||
|
auto track_name = track_record["name"].toString();
|
||||||
|
auto track_points = track_record["points"].toArray();
|
||||||
|
|
||||||
|
RouteResource value;
|
||||||
|
for (auto tidx = 0; tidx < track_points.size(); tidx++) {
|
||||||
|
auto point = track_points.at(tidx).toObject();
|
||||||
|
auto pins = LonLatPos{ point["point_lon"].toDouble(), point["point_lat"].toDouble() };
|
||||||
|
value._route_points << pins;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->_route_resource_map[track_name] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::saveTo(QJsonObject& obj) const
|
||||||
|
{
|
||||||
|
QJsonArray route_array;
|
||||||
|
for (auto route_name : this->_route_resource_map.keys()) {
|
||||||
|
QJsonObject track_record;
|
||||||
|
track_record["name"] = route_name;
|
||||||
|
QJsonArray point_array;
|
||||||
|
for (auto pointv : this->_route_resource_map[route_name]._route_points) {
|
||||||
|
QJsonObject point;
|
||||||
|
point["point_lon"] = pointv._lon_deg;
|
||||||
|
point["point_lat"] = pointv._lat_deg;
|
||||||
|
point_array.append(point);
|
||||||
|
}
|
||||||
|
track_record["points"] = point_array;
|
||||||
|
|
||||||
|
route_array.append(track_record);
|
||||||
|
}
|
||||||
|
|
||||||
|
obj["total_route"] = route_array;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<WsComponent> PlainRouteManage::defaultNew() const
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteManage::bindEntity(std::weak_ptr<WsEntity> host)
|
||||||
|
{
|
||||||
|
this->_bind_entity = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlainRouteManage::name() const
|
||||||
|
{
|
||||||
|
return NAME(PlainRouteManage);
|
||||||
|
}
|
||||||
|
|
||||||
|
RouteResource& RouteResource::operator=(const RouteResource& other)
|
||||||
|
{
|
||||||
|
this->_route_points = other._route_points;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,44 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
class MapRoute
|
#include "componentbasic.h"
|
||||||
{
|
#include <route_access.h>
|
||||||
|
#include <QHash>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 路径资源
|
||||||
|
/// </summary>
|
||||||
|
struct RouteResource {
|
||||||
|
QList<LonLatPos> _route_points;
|
||||||
|
|
||||||
|
RouteResource& operator=(const RouteResource& other);
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 平面路径管理插件
|
||||||
|
/// </summary>
|
||||||
|
class PlainRouteManage : public ProcList<
|
||||||
|
WsRespond<NewPlainRoute, RespondDefault>,
|
||||||
|
WsRespond<RemovePlainRoute, RespondDefault>,
|
||||||
|
WsRespond<PlainRouteReset, RespondDefault>,
|
||||||
|
WsRespond<PlainRouteQuery, PlainRouteInfo>
|
||||||
|
> {
|
||||||
|
private:
|
||||||
|
std::weak_ptr<WsEntity> _bind_entity;
|
||||||
|
QHash<QString, RouteResource> _route_resource_map;
|
||||||
|
|
||||||
|
public:
|
||||||
|
PlainRouteManage();
|
||||||
|
|
||||||
|
// 通过 ProcList 继承
|
||||||
|
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const NewPlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
||||||
|
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const RemovePlainRoute> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
||||||
|
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteReset> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
||||||
|
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const PlainRouteQuery> in, QList<std::shared_ptr<PlainRouteInfo>>& out) override;
|
||||||
|
|
||||||
|
void recoveryFrom(const QJsonObject& obj) override;
|
||||||
|
void saveTo(QJsonObject& obj) const override;
|
||||||
|
|
||||||
|
std::shared_ptr<WsComponent> defaultNew() const override;
|
||||||
|
void bindEntity(std::weak_ptr<WsEntity> host) override;
|
||||||
|
QString name() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,10 @@
|
||||||
#define STRLIST_PEAK(u) u = obj[NAME(u)].toString().split(",")
|
#define STRLIST_PEAK(u) u = obj[NAME(u)].toString().split(",")
|
||||||
|
|
||||||
class MESSAGEBASIC_EXPORT AbstractMessage : public WsMessage {
|
class MESSAGEBASIC_EXPORT AbstractMessage : public WsMessage {
|
||||||
private:
|
protected:
|
||||||
uint64_t _from_id = 0, _to_id = 0;
|
uint64_t _from_id = 0, _to_id = 0;
|
||||||
QString _topic_string;
|
QString _topic_string;
|
||||||
|
|
||||||
protected:
|
|
||||||
AbstractMessage(const QString& topic);
|
AbstractMessage(const QString& topic);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -66,3 +66,56 @@ void RemovePlainRoute::saveTo(QJsonObject& obj) const
|
||||||
AbstractMessage::saveTo(obj);
|
AbstractMessage::saveTo(obj);
|
||||||
STRING_SAVE(_route_name);
|
STRING_SAVE(_route_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlainRouteQuery::PlainRouteQuery()
|
||||||
|
:AbstractMessage(NAME(PlainRouteQuery))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteQuery::recoveryFrom(const QJsonObject& obj)
|
||||||
|
{
|
||||||
|
AbstractMessage::recoveryFrom(obj);
|
||||||
|
STRING_PEAK(_route_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteQuery::saveTo(QJsonObject& obj) const
|
||||||
|
{
|
||||||
|
AbstractMessage::saveTo(obj);
|
||||||
|
STRING_SAVE(_route_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlainRouteInfo::PlainRouteInfo()
|
||||||
|
:RespondDefault() {
|
||||||
|
_topic_string = NAME(PlainRouteInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PlainRouteInfo::recoveryFrom(const QJsonObject& obj)
|
||||||
|
{
|
||||||
|
RespondDefault::recoveryFrom(obj);
|
||||||
|
STRING_PEAK(this->_route_name);
|
||||||
|
|
||||||
|
QStringList lonlist, latlist;
|
||||||
|
STRLIST_PEAK(lonlist);
|
||||||
|
STRLIST_PEAK(latlist);
|
||||||
|
for (auto idx = 0; idx < lonlist.size(); ++idx) {
|
||||||
|
auto lon = lonlist.at(idx).toDouble();
|
||||||
|
auto lat = latlist.at(idx).toDouble();
|
||||||
|
this->_lonlat_list << LonLatPos{ lon, lat };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlainRouteInfo::saveTo(QJsonObject& obj) const
|
||||||
|
{
|
||||||
|
RespondDefault::saveTo(obj);
|
||||||
|
STRING_SAVE(this->_route_name);
|
||||||
|
|
||||||
|
QStringList lonlist, latlist;
|
||||||
|
for (auto pos : this->_lonlat_list) {
|
||||||
|
lonlist << QString("%1").arg(pos._lon_deg);
|
||||||
|
latlist << QString("%1").arg(pos._lat_deg);
|
||||||
|
}
|
||||||
|
STRLIST_SAVE(lonlist);
|
||||||
|
STRLIST_SAVE(latlist);
|
||||||
|
}
|
|
@ -41,3 +41,30 @@ struct MESSAGEBASIC_EXPORT PlainRouteReset : public AbstractMessage {
|
||||||
void recoveryFrom(const QJsonObject& obj) override;
|
void recoveryFrom(const QJsonObject& obj) override;
|
||||||
void saveTo(QJsonObject& obj) const override;
|
void saveTo(QJsonObject& obj) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 平面路径数据查询
|
||||||
|
/// </summary>
|
||||||
|
struct MESSAGEBASIC_EXPORT PlainRouteQuery : public AbstractMessage {
|
||||||
|
QString _route_name;
|
||||||
|
|
||||||
|
PlainRouteQuery();
|
||||||
|
|
||||||
|
// Serializable
|
||||||
|
void recoveryFrom(const QJsonObject& obj) override;
|
||||||
|
void saveTo(QJsonObject& obj) const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 返回平面路径数据
|
||||||
|
/// </summary>
|
||||||
|
struct MESSAGEBASIC_EXPORT PlainRouteInfo : public RespondDefault {
|
||||||
|
QList<LonLatPos> _lonlat_list;
|
||||||
|
QString _route_name;
|
||||||
|
|
||||||
|
PlainRouteInfo();
|
||||||
|
|
||||||
|
// Serializable
|
||||||
|
void recoveryFrom(const QJsonObject& obj) override;
|
||||||
|
void saveTo(QJsonObject& obj) const override;
|
||||||
|
};
|
Loading…
Reference in New Issue