FIX: fixed issue with locking

This commit is contained in:
Henry Winkel
2024-03-07 16:59:42 +01:00
parent e947d29669
commit 14e4fddab4
7 changed files with 22 additions and 40 deletions

View File

@@ -46,7 +46,7 @@ COPY build/libs/OrderLibrary/libs/SimCore/libs/whisper-com/libs/protobuf/third_p
COPY build/libs/OrderLibrary/libs/SimCore/libs/geographiclib/src/libGeographicLib.so.23 /usr/lib/ COPY build/libs/OrderLibrary/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/yaml-cpp/libyaml-cpp.so.0.8 /usr/lib/
COPY build/libs/KubeControl/libs/curlpp/libcurlpp.so.1 /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/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/

View File

@@ -45,7 +45,7 @@ namespace SimControl
void checkTracksTimeout(); void checkTracksTimeout();
const int TrackTimeoutTime = 12; const int TrackTimeoutTime = 6;
}; };

View File

@@ -54,17 +54,6 @@ namespace SimControl {
PodController_ = std::make_unique<kubecontrol::PodController>("docs/config"); PodController_ = std::make_unique<kubecontrol::PodController>("docs/config");
} }
// ExternalTCPServer_ = std::make_shared<DirectCommunication::DirectCommunicationServer>(5000,ID_.getUUID());
// ExternalTCPServer_->registerMessageCallback(std::bind(&SimControl::HandleTCPMessage,this,std::placeholders::_1));
// TCPClient_ = std::make_unique<DirectCommunication::DirectCommunicationClient>(30200,"192.168.252.6");
// TCPClient_ = std::make_unique<DirectCommunication::DirectCommunicationClient>(5555,"127.0.0.1");
// TCPClient_->registerMessageCallback(std::bind(&SimControl::HandleMessage,this,std::placeholders::_1));
// TCPClient_->sendMessage("Hello Server");
WebsocketServer_ = std::make_shared<ix::WebSocketServer>(port,host); WebsocketServer_ = std::make_shared<ix::WebSocketServer>(port,host);
WebsocketServer_->setOnClientMessageCallback( [this](std::shared_ptr<ix::ConnectionState> connectionState, ix::WebSocket &websocket, const ix::WebSocketMessagePtr &msg) WebsocketServer_->setOnClientMessageCallback( [this](std::shared_ptr<ix::ConnectionState> connectionState, ix::WebSocket &websocket, const ix::WebSocketMessagePtr &msg)
@@ -146,7 +135,7 @@ namespace SimControl {
void SimControl::HandleBroadcastMessage(std::string msg) void SimControl::HandleBroadcastMessage(std::string msg)
{ {
// LOG_S(INFO)<<msg; LOG_S(INFO)<<msg;
auto track = SimCore::SimTrack::unpack(msg); auto track = SimCore::SimTrack::unpack(msg);
if (track != nullptr) if (track != nullptr)
@@ -155,6 +144,7 @@ namespace SimControl {
// LOG_S(INFO)<<"Track received"; // LOG_S(INFO)<<"Track received";
Tracklist_->addTrack(item); Tracklist_->addTrack(item);
LOG_S(INFO)<<Tracklist_->getTracklistSize();
} }
@@ -185,7 +175,7 @@ namespace SimControl {
if (msg->type == ix::WebSocketMessageType::Open) if (msg->type == ix::WebSocketMessageType::Open)
{ {
// LOG_S(INFO)<< "New connection" ; LOG_S(INFO)<< "New connection" ;
// A connection state object is available, and has a default id // A connection state object is available, and has a default id
// You can subclass ConnectionState and pass an alternate factory // You can subclass ConnectionState and pass an alternate factory
@@ -206,15 +196,14 @@ namespace SimControl {
{ {
try { try {
nlohmann::json j = nlohmann::json::parse(msg->str); nlohmann::json j = nlohmann::json::parse(msg->str);
if (j["Data"] == "COP") if (j["Data"] == "COP")
{ {
if (j["Type"] == "Request") { if (j["Type"] == "Request") {
nlohmann::json response; nlohmann::json response;
response["Data"] = "COP"; response["Data"] = "COP";
Tracklist_->getJsonTRackList(response); Tracklist_->getJsonTRackList(response);
LOG_S(INFO)<<"Tracklist size: " << Tracklist_->getTracklistSize();
// LOG_S(INFO)<<response;
websocket.send(response.dump()); websocket.send(response.dump());
}else if(j["Type"] == "EntityTrackList") }else if(j["Type"] == "EntityTrackList")
{ {
@@ -223,7 +212,6 @@ namespace SimControl {
{ {
nlohmann::json response; nlohmann::json response;
this->getTrackListForEntity(j["ID"].get<std::string>(),response); this->getTrackListForEntity(j["ID"].get<std::string>(),response);
websocket.send(response.dump()); websocket.send(response.dump());
} }
@@ -399,9 +387,7 @@ namespace SimControl {
{ {
LOG_S(INFO)<< "Update Ship: "<< request["ID"]; LOG_S(INFO)<< "Update Ship: "<< request["ID"];
// if (j["Type"] == ) {
// statements
// }
LOG_S(INFO)<< "Entity values:" << request; LOG_S(INFO)<< "Entity values:" << request;
auto track = Tracklist_->getTrackBySringID(request["ID"].get<std::string>()); auto track = Tracklist_->getTrackBySringID(request["ID"].get<std::string>());
Orders::MoveOrder moveOrder(track->getIdentifier()); Orders::MoveOrder moveOrder(track->getIdentifier());
@@ -494,6 +480,7 @@ namespace SimControl {
auto update = SimCore::TracklistUpdate::unpack(WHISPER::Message(response)); auto update = SimCore::TracklistUpdate::unpack(WHISPER::Message(response));
if(update == nullptr) if(update == nullptr)
{ {
LOG_S(INFO)<<"no update received";
return; return;
} }
try try

View File

@@ -20,20 +20,10 @@ namespace SimControl
void TrackList::addTrack(std::shared_ptr<SimControl::TrackItem> Track) void TrackList::addTrack(std::shared_ptr<SimControl::TrackItem> Track)
{ {
std::lock_guard<std::mutex> lock(mx_); std::lock_guard<std::mutex> lock(mx_);
// LOG_S(INFO)<<markedAsDeletedTracks_.size();
checkTracksTimeout(); checkTracksTimeout();
// auto it = markedAsDeletedTracks_.find(Track->getIdentifier().getUUID());
// if (it == markedAsDeletedTracks_.end() )
// {
// auto [iterator, inserted] = TrackStore_.try_emplace(Track->getIdentifier().getUUID(),Track);
// if (!inserted) { iterator->second = Track; }
// }
auto [iterator, inserted] = TrackStore_.try_emplace(Track->getIdentifier().getUUID(),Track); auto [iterator, inserted] = TrackStore_.try_emplace(Track->getIdentifier().getUUID(),Track);
if (!inserted) if (!inserted)
{ {
@@ -41,10 +31,11 @@ namespace SimControl
{ {
iterator->second = Track; iterator->second = Track;
} }
}else {
mx_.unlock();
LOG_S(INFO)<< "Track added new Size:" << this->getTracklistSize();
} }
} }
@@ -55,7 +46,7 @@ namespace SimControl
for (std::map<std::string, std::shared_ptr<SimControl::TrackItem>>::iterator it=TrackStore_.begin(); it != TrackStore_.end();) for (std::map<std::string, std::shared_ptr<SimControl::TrackItem>>::iterator it=TrackStore_.begin(); it != TrackStore_.end();)
{ {
if ((time(0) - it->second->getLastUpdateTimestamp())>= 6 ) if ((time(0) - it->second->getLastUpdateTimestamp())>= TrackTimeoutTime )
{ {
it = TrackStore_.erase(it); it = TrackStore_.erase(it);
}else { }else {
@@ -141,8 +132,9 @@ namespace SimControl
size_t TrackList::getTracklistSize() size_t TrackList::getTracklistSize()
{ {
std::lock_guard<std::mutex> lock(mx_); std::lock_guard<std::mutex> lock(mx_);
size_t size = this->TrackStore_.size();
return size;
return this->TrackStore_.size();
} }

View File

@@ -2,6 +2,7 @@
#include "SimControl/SimControl.hpp" #include "SimControl/SimControl.hpp"
#include "SimCore/Messages/SensorTrack.hpp"
#include "nlohmann/json_fwd.hpp" #include "nlohmann/json_fwd.hpp"
#include <fstream> #include <fstream>
#include <future> #include <future>
@@ -95,7 +96,7 @@ void addTracksToTracklistUpdate(SimCore::TracklistUpdate *update, int amount)
for(int i = 0; i < amount; i++) for(int i = 0; i < amount; i++)
{ {
std::string name = "test1-" + std::to_string(i); std::string name = "test1-" + std::to_string(i);
auto track = std::make_shared<SimCore::SimTrack>(name,SimCore::Kind::EntityKind::SURFACE,SimCore::Side::NEUTRAL); auto track = std::make_shared<SimCore::SensorTrack>(name,SimCore::Kind::EntityKind::SURFACE,SimCore::Side::NEUTRAL);
SimCore::Position pos; SimCore::Position pos;
double lat = fRand(-90, 90); double lat = fRand(-90, 90);
double lon = fRand(-180, 180); double lon = fRand(-180, 180);

View File

@@ -96,7 +96,9 @@ auto track = list.getTrackBySringID(ids[3]);
list.addTrack(std::make_shared<SimControl::TrackItem>(*track)); list.addTrack(std::make_shared<SimControl::TrackItem>(*track));
// REQUIRE(list.getTracklistSize() == 24); // REQUIRE(list.getTracklistSize() == 24);
LOG_S(INFO)<<"wait for 7500ms";
std::this_thread::sleep_for(std::chrono::milliseconds(7500)); std::this_thread::sleep_for(std::chrono::milliseconds(7500));
LOG_S(INFO)<<"continue";
LOG_S(INFO)<<"add saved track"; LOG_S(INFO)<<"add saved track";
list.addTrack(std::make_shared<SimControl::TrackItem>(*track)); list.addTrack(std::make_shared<SimControl::TrackItem>(*track));
LOG_S(INFO)<<"added saved track"; LOG_S(INFO)<<"added saved track";