From bba4af0f9090a5c81617ab0e5234ac708907c274 Mon Sep 17 00:00:00 2001 From: Henry Winkel Date: Tue, 15 Aug 2023 17:48:44 +0200 Subject: [PATCH] ADD: added new way of handling command messages --- include/Entities/Entity.hpp | 2 +- src/Entities/Entity.cpp | 91 ++++++++++++++++++++++++++++++------- 2 files changed, 75 insertions(+), 18 deletions(-) diff --git a/include/Entities/Entity.hpp b/include/Entities/Entity.hpp index e36b036..1598c13 100644 --- a/include/Entities/Entity.hpp +++ b/include/Entities/Entity.hpp @@ -82,6 +82,7 @@ namespace Entities { ushort MovemntWorkerPort_; + std::unique_ptr PodController_; @@ -111,7 +112,6 @@ namespace Entities { void startSensor(); - std::unique_ptr PodController_; std::shared_ptr> SensorStore_; diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 7676f3d..69e08d2 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -1,6 +1,7 @@ #include "DirectCommunicationServer.hpp" #include "Entities/Movement.hpp" #include "Orders/MoveOrder.hpp" +#include "SimCore/Messages/Control.hpp" #include "SimCore/Messages/SimTrack.hpp" #include "SimCore/UtilFunctions.hpp" #include "WHISPER/InternalUDPListener.hpp" @@ -17,6 +18,8 @@ #include #include +#include +#include #include #include #include @@ -58,9 +61,8 @@ namespace Entities Entity::~Entity() { - PodController_->stopAllPods(); stop(); - MovemtServer_.reset(); + } @@ -121,6 +123,12 @@ namespace Entities void Entity::stop() { + + + PodController_->stopAllPods(); + + MovemtServer_.reset(); + stopMainLoop = true; @@ -136,8 +144,9 @@ namespace Entities } LOG_S(ERROR)<< threads.size(); + std::this_thread::sleep_for(std::chrono::milliseconds(30000)); - + exit(0); } void Entity::startMovementWorker() @@ -145,8 +154,10 @@ namespace Entities if (online_ == true) { LOG_S(INFO)<<"__ONLINE__"; MovementPodUUID_ = xg::newGuid().str(); - auto MovementPod = kubecontrol::KubePod(MovementPodUUID_,MovementPodUUID_,"movementimage:latest"); + LOG_S(INFO)<OwnShipTrack->getIdentifier().getUUID(); + auto MovementPod = kubecontrol::KubePod(this->OwnShipTrack->getIdentifier().getUUID(),MovementPodUUID_,"movementimage:latest"); MovementPod.setEnvironmentVar("SERVER_IP", SimCore::UtilFunctions::getOwnIP()); + MovementPod.setComponent("MovementCalculation"); LOG_S(INFO)<< MovementPod.createYAML(); PodController_->startPod(MovementPod); LOG_S(INFO)<getServerAddress(); @@ -190,6 +201,7 @@ namespace Entities if (MovemtServer_->countClients() == 0) { MovementWorkerStarted = false; + LOG_S(WARNING)<<"Movementclient lost"; } std::this_thread::sleep_for(std::chrono::milliseconds(500)); @@ -197,23 +209,68 @@ namespace Entities void Entity::handleExternalComms(std::string msg) { - // LOG_S(INFO)<Speed.isValid()) this->setSpeed(MoveOrder->Speed.getValue()); - if(MoveOrder->Course.isValid()) this->setCourse(MoveOrder->Course.getValue()); - if(MoveOrder->getPosition().isValid()) + switch (whisperMsg.msgType_) + { + case WHISPER::MsgType::ORDER: + { + + auto MoveOrder = Orders::MoveOrder::unpack(whisperMsg); + if (MoveOrder != nullptr) { - LOG_S(INFO)<<"New Position received"; + if(MoveOrder->Speed.isValid()) this->setSpeed(MoveOrder->Speed.getValue()); + if(MoveOrder->Course.isValid()) this->setCourse(MoveOrder->Course.getValue()); + if(MoveOrder->getPosition().isValid()) + { + LOG_S(INFO)<<"New Position received"; - this->setPosition(MoveOrder->getPosition()); - } - // CommandCommsServer_->sendMessage("Hello Client"); - } + this->setPosition(MoveOrder->getPosition()); + } + } + break; - + } + case WHISPER::MsgType::COMMAND: + { + std::unique_ptr control = std::move(SimCore::Control::unpack(whisperMsg)); + switch (control->Type) + { + case SimCore::IDENTIFY : + case SimCore::START: + case SimCore::STOP : + case SimCore::SHUT_DOWN : + { + LOG_S(INFO)<<"shutdown received"; + this->stop(); + } + case SimCore::CREATE_ENTITY: + case SimCore::DELETE_ENTITY : + case SimCore::GET_CONTROL: + + break; + }; + break; + + } + + default: + { + + } + + }; + + } catch (std::exception &e) { + LOG_S(ERROR)<sendMessage(this->OwnShipTrack->buildMessage().serialize()); }