ADD: added orders and implemented order and moveorder and test for moveorder
This commit is contained in:
116
src/Orders/MoveOrder.cpp
Normal file
116
src/Orders/MoveOrder.cpp
Normal file
@@ -0,0 +1,116 @@
|
||||
#include "SimCore/Position.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>
|
||||
|
||||
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 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()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
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 msg = WHISPER::Message(getOrderingEntity().getParentNumber(), getOrderingEntity().getNumber(), 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 (startTime_ != 0) {
|
||||
MoveOrder.mutable_startingtime()->set_seconds(startTime_);
|
||||
}
|
||||
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<MoveOrder> MoveOrder::unpack(WHISPER::Message msg)
|
||||
{
|
||||
|
||||
if(msg.msgType_ == WHISPER::MsgType::COMMAND)
|
||||
{
|
||||
auto protoMsg = msg.getProtoMessage();
|
||||
if (protoMsg.has_payload() && protoMsg.payload().Is<messages::entity::order::Order>())
|
||||
{
|
||||
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());
|
||||
|
||||
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);
|
||||
|
||||
MoveOrderObj->setSpeed(moveOrder.speed());
|
||||
MoveOrderObj->setStartTime(moveOrder.mutable_startingtime()->seconds());
|
||||
|
||||
|
||||
return MoveOrderObj;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
25
src/Orders/Order.cpp
Normal file
25
src/Orders/Order.cpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#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),
|
||||
srcType(srcType),
|
||||
OrderType_(OrderType_)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
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_;}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user