ADD: added new version of Orders and a first use in the entity base class

This commit is contained in:
Henry Winkel
2023-07-06 09:29:11 +02:00
parent 3333fadf20
commit 89665f3ce7
12 changed files with 263 additions and 474 deletions

View File

@@ -1,22 +1,32 @@
#include "SimCore/Position.hpp"
#include "SimCore/data.hpp"
#include <Orders/Order.hpp>
#include <WHISPER/Messages/Message.hpp>
#include <Orders/MoveOrder.hpp>
#include <Orders/protos/MoveOrder.pb.h>
#include <Orders/protos/Order.pb.h>
#include <memory>
namespace Orders
{
MoveOrder::MoveOrder(const SimCore::Identifier id,const SimCore::Identifier orderingEntity,const SimCore::Identifier orderedEntity,WHISPER::SourceType srcType):
Order(id, orderingEntity, orderedEntity,srcType,Orders::MOVE_ORDER)
MoveOrder::MoveOrder(const SimCore::Identifier OwnID, WHISPER::SourceType srcType):
Order(OwnID,srcType,Orders::MOVE_ORDER)
{
Speed = SimCore::Data<double>();
Course = SimCore::Data<double>();
StartTime = SimCore::Data<uint64_t>();
pos_ = SimCore::Position();
}
MoveOrder::MoveOrder(const SimCore::Identifier id,const SimCore::Identifier orderingEntity,const SimCore::Identifier orderedEntity,WHISPER::SourceType srcType,SimCore::Position pos,double speed, int startTime ):
Order(id, orderingEntity, orderedEntity,srcType,Orders::MOVE_ORDER),speed_(speed),startTime_(startTime)
MoveOrder::MoveOrder(const SimCore::Identifier OwnID,WHISPER::SourceType srcType,SimCore::Position pos,double speed,double course , int startTime ):
Order(OwnID, srcType,Orders::MOVE_ORDER)
{
Speed = SimCore::Data<double>();
Course = SimCore::Data<double>();
StartTime = SimCore::Data<uint64_t>();
pos_ = SimCore::Position();
}
@@ -25,51 +35,41 @@ namespace Orders
}
void MoveOrder::addData(SimCore::Position pos,double speed, int startTime )
{
pos_ = pos;
speed_ = speed;
startTime_ = startTime;
}
void MoveOrder::setPosition(SimCore::Position pos)
{
pos_ = pos;
}
void MoveOrder::setSpeed(double speed)
{
speed_ = speed;
}
void MoveOrder::setStartTime(uint64_t startTime)
{
startTime_ = startTime;
}
SimCore::Position MoveOrder::getPosition(){return pos_;}
double MoveOrder::getSpeed(){return speed_;}
uint64_t MoveOrder::getStartTime(){return startTime_;}
WHISPER::Message MoveOrder::buildMessage(SimCore::Identifier parentID)
WHISPER::Message MoveOrder::buildMessage()
{
WHISPER::Message msg = WHISPER::Message(getOrderingEntity().getParentNumber(), getOrderingEntity().getNumber(), WHISPER::MsgTopics::COMMANDS , WHISPER::MsgType::COMMAND , srcType);
WHISPER::Message msg = WHISPER::Message(getOwnID().getUUID(), WHISPER::MsgTopics::COMMANDS , WHISPER::MsgType::COMMAND , srcType);
messages::entity::order::MoveOrder MoveOrder = messages::entity::order::MoveOrder();
MoveOrder.mutable_geocentricposition()->set_x(pos_.getGeocentricPos().x());
MoveOrder.mutable_geocentricposition()->set_y(pos_.getGeocentricPos().y());
MoveOrder.mutable_geocentricposition()->set_z(pos_.getGeocentricPos().z());
if (speed_ != 0) {
MoveOrder.set_speed(speed_);
if (pos_.isValid())
{
MoveOrder.mutable_geocentricposition()->set_x(pos_.getGeocentricPos().x());
MoveOrder.mutable_geocentricposition()->set_y(pos_.getGeocentricPos().y());
MoveOrder.mutable_geocentricposition()->set_z(pos_.getGeocentricPos().z());
}
if (startTime_ != 0) {
MoveOrder.mutable_startingtime()->set_seconds(startTime_);
if (Speed.getValidity() == true) {
MoveOrder.set_speed(Speed.getValue());
}
if (Course.getValidity() == true) {
MoveOrder.set_course(Course.getValue());
}
if (StartTime.getValidity() == true) {
MoveOrder.mutable_startingtime()->set_seconds(StartTime.getValue());
}
@@ -77,7 +77,7 @@ namespace Orders
}
std::shared_ptr<MoveOrder> MoveOrder::unpack(WHISPER::Message msg)
std::unique_ptr<MoveOrder> MoveOrder::unpack(WHISPER::Message msg)
{
if(msg.msgType_ == WHISPER::MsgType::COMMAND)
@@ -87,23 +87,26 @@ namespace Orders
{
auto order = messages::entity::order::Order();
protoMsg.payload().UnpackTo(&order);
if (order.has_orderpayload() && order.orderpayload().Is<messages::entity::order::MoveOrder>())
{
auto moveOrder = messages::entity::order::MoveOrder();
order.orderpayload().UnpackTo(&moveOrder);
SimCore::Identifier OrderID(order.orderid().parent(),order.orderid().number(),order.orderid().external());
SimCore::Identifier OrderingID(order.orderingentity().parent(),order.orderingentity().number(),order.orderingentity().external());
SimCore::Identifier OrderedID(order.orderedentity().parent(),order.orderedentity().number(),order.orderedentity().external());
SimCore::Identifier OrderID(order.orderid());
auto pos = SimCore::Position(moveOrder.geocentricposition().x(),moveOrder.geocentricposition().y(),moveOrder.geocentricposition().z());
auto MoveOrderObj = std::make_shared<MoveOrder>(OrderID,OrderingID,OrderedID,(WHISPER::SourceType)msg.sourceType_,pos);
auto MoveOrderObj = std::make_unique<MoveOrder>(OrderID,(WHISPER::SourceType)msg.sourceType_);
if (moveOrder.has_geocentricposition()) MoveOrderObj->setPosition(SimCore::Position(moveOrder.geocentricposition().x(),moveOrder.geocentricposition().y(),moveOrder.geocentricposition().z()));
if (moveOrder.has_speed()) MoveOrderObj->Speed.setValue(moveOrder.speed());
if (moveOrder.has_course()) MoveOrderObj->Course.setValue(moveOrder.course());
if (moveOrder.has_startingtime()) MoveOrderObj->Course.setValue(moveOrder.mutable_startingtime()->seconds());
MoveOrderObj->setSpeed(moveOrder.speed());
MoveOrderObj->setStartTime(moveOrder.mutable_startingtime()->seconds());
return MoveOrderObj;
return std::move(MoveOrderObj);
}
}
@@ -112,5 +115,16 @@ namespace Orders
return nullptr;
}
std::unique_ptr<MoveOrder> MoveOrder::unpack(std::string msg)
{
if (std::empty(msg) == false && msg != "NULL")
{
WHISPER::Message whisperMessage(msg);
return std::move(unpack(whisperMessage));
}
return nullptr;
}
}

View File

@@ -1,13 +1,13 @@
#include "SimCore/Identifier.hpp"
#include <Orders/Order.hpp>
namespace Orders
{
Order::Order(const SimCore::Identifier id,const SimCore::Identifier orderingEntity,const SimCore::Identifier orderedEntity,const WHISPER::SourceType srcType, const Orders::OrderType OrderType_):
orderID_(id),
orderingEntity_(orderingEntity),
orderedEntity_(orderedEntity),
Order::Order(const SimCore::Identifier OwnID,const WHISPER::SourceType srcType, const Orders::OrderType OrderType_):
orderID_(SimCore::Identifier()),
OwnID_(OwnID),
srcType(srcType),
OrderType_(OrderType_)
{
@@ -18,8 +18,7 @@ namespace Orders
const SimCore::Identifier Order::getOrderID(){ return orderID_;}
const SimCore::Identifier Order::getOrderingEntity(){ return orderingEntity_;}
const SimCore::Identifier Order::getOrderedEntity(){ return orderedEntity_;}
const Orders::OrderType Order::getOrderType(){return OrderType_;}
const SimCore::Identifier Order::getOwnID(){return OwnID_;}
}