ADD: add functionality to delete and add new entities

This commit is contained in:
Henry Winkel
2023-11-02 18:05:56 +01:00
parent 9778aec6a1
commit d151808609
9 changed files with 95 additions and 15 deletions

View File

@@ -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/

View File

@@ -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}

View File

@@ -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);

View File

@@ -20,7 +20,8 @@ namespace SimControl
void addTrack(std::shared_ptr<SimCore::SimTrack> Track);
std::shared_ptr<SimCore::SimTrack> getTrack(SimCore::Identifier);
void deleteTrack(std::string ID);
void deleteTrack(SimCore::Identifier);
std::shared_ptr<SimCore::SimTrack> getTrackBySringID(std::string ID);

View File

@@ -210,8 +210,18 @@ namespace SimControl {
}else if (j["Data"] == "Entity")
{
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: "<<request["Position"][0].get<double>();
LOG_S(INFO)<<"LON: "<<request["Position"][1].get<double>();
LOG_S(INFO)<<"LAT: "<<request["Position"][0].get<std::string>();
LOG_S(INFO)<<"LON: "<<request["Position"][1].get<std::string>();
pos.setGeodesicPos(request["Position"][0].get<double>(),request["Position"][1].get<double>(), request["Height"].get<double>());
pos.setGeodesicPos(std::stod(request["Position"][0].get<std::string>()),std::stod(request["Position"][1].get<std::string>()), std::stod(request["Height"].get<std::string>()));
moveOrder.setPosition(pos);
}
@@ -296,7 +343,23 @@ namespace SimControl {
void SimControl::deleteShip(nlohmann::json request)
{
LOG_S(INFO)<<"REQUEST: "<<request;
PodController_->checkPodsHierarchy();
auto info = PodController_->getPodsInfo(request["ID"].get<std::string>());
if(info != nullptr)
{
LOG_S(INFO)<<"PODS Info: " <<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()

View File

@@ -39,6 +39,20 @@ namespace SimControl
return it->second;
}
void TrackList::deleteTrack(std::string ID)
{
std::lock_guard<std::mutex> lock(mx_);
auto it = TrackStore_.find(ID);
TrackStore_.erase(it);
}
void TrackList::deleteTrack(SimCore::Identifier ID)
{
std::lock_guard<std::mutex> lock(mx_);
auto it = TrackStore_.find(ID.getUUID());
TrackStore_.erase(it);
}
void TrackList::getJsonTRackList(nlohmann::json &message)
{