From d151808609f6b95078f3057e86ed2909462db49d Mon Sep 17 00:00:00 2001 From: Henry Winkel Date: Thu, 2 Nov 2023 18:05:56 +0100 Subject: [PATCH] ADD: add functionality to delete and add new entities --- Dockerfile | 2 +- buildDocker.sh | 8 ++-- include/SimControl/SimControl.hpp | 2 + include/SimControl/Tracklist.hpp | 3 +- libs/OrderLibrary | 2 +- libs/SimCore | 2 +- libs/ixwebsocket | 2 +- src/SimControl/SimControl.cpp | 75 ++++++++++++++++++++++++++++--- src/SimControl/Tracklist.cpp | 14 ++++++ 9 files changed, 95 insertions(+), 15 deletions(-) diff --git a/Dockerfile b/Dockerfile index ede9d1e..d2eb0ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY build/libs/SimCore/libs/geographiclib/src/libGeographicLib.so.23 /usr/lib/ COPY build/libs/KubeControl/libs/yaml-cpp/libyaml-cpp.so.0.8 /usr/lib/ COPY build/libs/KubeControl/libs/curlpp/libcurlpp.so.1 /usr/lib/ # COPY build/libs/EntityLibrary/libs/SimCore/libs/crossguid/libcrossguid.so.0 /usr/lib/ -# COPY build/libs/SimCore/libs/crossguid/libcrossguid.so.0 /usr/lib/ +COPY build/libs/SimCore/libs/crossguid/libcrossguid.so.0 /usr/lib/ COPY build/libs/ixwebsocket/libixwebsocket.so.0.1.0 /usr/lib/ diff --git a/buildDocker.sh b/buildDocker.sh index 6b983b2..cadbb4e 100755 --- a/buildDocker.sh +++ b/buildDocker.sh @@ -2,7 +2,7 @@ cd build/ make -j8 cd .. TAG="kmaster.ti.unibw-hamburg.de:30808/simcontrol:latest" -# sudo buildah bud --pull -f "Dockerfile" -t ${TAG} -# buildah push ${TAG} -docker build --pull --rm -f "Dockerfile" -t ${TAG} "." -docker image push ${TAG} +sudo buildah bud --pull -f "Dockerfile" -t ${TAG} +sudo buildah push ${TAG} +# docker build --pull --rm -f "Dockerfile" -t ${TAG} "." +# docker image push ${TAG} diff --git a/include/SimControl/SimControl.hpp b/include/SimControl/SimControl.hpp index bbb00b5..cf7a1e6 100644 --- a/include/SimControl/SimControl.hpp +++ b/include/SimControl/SimControl.hpp @@ -5,6 +5,7 @@ #include "DirectCommunicationServer.hpp" #include "SimControl/Tracklist.hpp" #include "SimCore/Identifier.hpp" +#include "SimCore/Position.hpp" #include "WHISPER/InternalUDPListener.hpp" #include "crossguid/guid.hpp" #include "ixwebsocket/IXConnectionState.h" @@ -55,6 +56,7 @@ class SimControl{ void startShip(std::string name); + void startNewShip(std::string Name, std::string lat, std::string lon, std::string height , std::string course, std::string speed); void updateShip(nlohmann::json request); void deleteShip(nlohmann::json request); diff --git a/include/SimControl/Tracklist.hpp b/include/SimControl/Tracklist.hpp index fee72dd..9a7ca0b 100644 --- a/include/SimControl/Tracklist.hpp +++ b/include/SimControl/Tracklist.hpp @@ -20,7 +20,8 @@ namespace SimControl void addTrack(std::shared_ptr Track); std::shared_ptr getTrack(SimCore::Identifier); - + void deleteTrack(std::string ID); + void deleteTrack(SimCore::Identifier); std::shared_ptr getTrackBySringID(std::string ID); diff --git a/libs/OrderLibrary b/libs/OrderLibrary index 836cee9..f4f9819 160000 --- a/libs/OrderLibrary +++ b/libs/OrderLibrary @@ -1 +1 @@ -Subproject commit 836cee9d6ca80582fad2e376d0c8632e58c85397 +Subproject commit f4f98191bfc16fb31480262f14addb9270023559 diff --git a/libs/SimCore b/libs/SimCore index e879a12..49dd5e2 160000 --- a/libs/SimCore +++ b/libs/SimCore @@ -1 +1 @@ -Subproject commit e879a12f2667f7a82c8a8ea2aad2d0ced957cb69 +Subproject commit 49dd5e295ff6db3ee6f416ffb66855d0ac6b7232 diff --git a/libs/ixwebsocket b/libs/ixwebsocket index ed5b1a0..f29906c 160000 --- a/libs/ixwebsocket +++ b/libs/ixwebsocket @@ -1 +1 @@ -Subproject commit ed5b1a0895577eda195f126e27f34e4c65be794a +Subproject commit f29906c72f1739e0c373495cde068923a88c2cc2 diff --git a/src/SimControl/SimControl.cpp b/src/SimControl/SimControl.cpp index 1f6e95d..57acd36 100644 --- a/src/SimControl/SimControl.cpp +++ b/src/SimControl/SimControl.cpp @@ -38,7 +38,7 @@ namespace SimControl { { // BroadcastListener_ = std::make_shared("239.0.0.1",10000); BroadcastListener_ = std::make_shared(GroundTruthAddr_,GroundTruthPort_); - + BroadcastListener_->registerMessageCallback(std::bind(&SimControl::HandleBroadcastMessage,this,std::placeholders::_1)); BroadcastListener_->connect(); BroadcastListener_->subscribe(WHISPER::MsgTopics::TRACK); @@ -210,8 +210,18 @@ namespace SimControl { }else if (j["Data"] == "Entity") { - updateShip(j); - + if(j["Type"] == "Update") + { + updateShip(j); + }else if(j["Type"] == "New") + { + + startNewShip( j["Name"], j["Position"][0], j["Position"][1], j["Height"] , j["Course"], j["Speed"]); + + }else if(j["Type"] == "Delete") + { + deleteShip(j); + } @@ -254,6 +264,43 @@ namespace SimControl { } + + void SimControl::startNewShip(std::string Name, std::string lat, std::string lon, std::string height , std::string course, std::string speed) + { + + + std::string uuid = xg::newGuid().str(); + kubecontrol::KubePod ShipPod1("controller",uuid,"ship","ship:latest",Namespace_); + + nlohmann::json vars; + vars["ENTITY_ID"] = uuid; + vars["ENTITY_NAME"] = Name; + vars["POSITION"]["LAT"] = lat; + vars["POSITION"]["LON"] = lon; + vars["POSITION"]["Height"] = height; + vars["COURSE"] = course; + vars["SPEED"] = speed; + vars["GROUNDTRUTH_PORT"] = std::to_string(this->GroundTruthPort_); + vars["GROUNDTRUTH_ADDR"] = this->GroundTruthAddr_; + vars["COMMAND_PORT"] = CommandPort_; + + ShipPod1.setEnvironmentVar("ENTITY_ID", uuid); + ShipPod1.setEnvironmentVar("ENTITY_NAME", Name); + ShipPod1.setEnvironmentVar("POS_LAT", "\""+ lat + "\""); + ShipPod1.setEnvironmentVar("POS_LONG", "\""+ lon + "\""); + ShipPod1.setEnvironmentVar("POS_HEIGHT", "\""+ height + "\""); + ShipPod1.setEnvironmentVar("GROUNDTRUTH_PORT", "\""+std::to_string(this->GroundTruthPort_)+"\""); + ShipPod1.setEnvironmentVar("GROUNDTRUTH_ADDR", "\""+this->GroundTruthAddr_+"\""); + ShipPod1.setEnvironmentVar("COMMAND_PORT", "\""+CommandPort_+"\""); + ShipPod1.setEnvironmentVar("CONFIG", vars.dump()); + + ShipPod1.createYAML(); + PodController_->startPod(ShipPod1); + + + } + + void SimControl::updateShip(nlohmann::json request) { // if (j["Type"] == ) { @@ -275,10 +322,10 @@ namespace SimControl { { LOG_S(INFO)<<"setting new position"; SimCore::Position pos; - LOG_S(INFO)<<"LAT: "<(); - LOG_S(INFO)<<"LON: "<(); + LOG_S(INFO)<<"LAT: "<(); + LOG_S(INFO)<<"LON: "<(); - pos.setGeodesicPos(request["Position"][0].get(),request["Position"][1].get(), request["Height"].get()); + pos.setGeodesicPos(std::stod(request["Position"][0].get()),std::stod(request["Position"][1].get()), std::stod(request["Height"].get())); moveOrder.setPosition(pos); } @@ -296,7 +343,23 @@ namespace SimControl { void SimControl::deleteShip(nlohmann::json request) { + LOG_S(INFO)<<"REQUEST: "<checkPodsHierarchy(); + auto info = PodController_->getPodsInfo(request["ID"].get()); + if(info != nullptr) + { + LOG_S(INFO)<<"PODS Info: " <ToJson(); + DirectCommunication::DirectCommunicationClient client(std::stoi(CommandPort_),info->Ip); + SimCore::Control control(this->ID_,SimCore::ControlType::SHUT_DOWN,"Bye"); + client.sendMessage(control.buildMessage().serialize()); + client.disconnect(); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + + PodController_->stopPod(request["ID"]); + Tracklist_->deleteTrack(request["ID"]); } void SimControl::startWebApp() diff --git a/src/SimControl/Tracklist.cpp b/src/SimControl/Tracklist.cpp index d8c4b09..3a25b14 100644 --- a/src/SimControl/Tracklist.cpp +++ b/src/SimControl/Tracklist.cpp @@ -39,6 +39,20 @@ namespace SimControl return it->second; } + void TrackList::deleteTrack(std::string ID) + { + std::lock_guard lock(mx_); + auto it = TrackStore_.find(ID); + TrackStore_.erase(it); + } + + void TrackList::deleteTrack(SimCore::Identifier ID) + { + std::lock_guard lock(mx_); + auto it = TrackStore_.find(ID.getUUID()); + TrackStore_.erase(it); + } + void TrackList::getJsonTRackList(nlohmann::json &message) {