diff --git a/include/Entities/Entity.hpp b/include/Entities/Entity.hpp index 5d787e5..07c5bfe 100644 --- a/include/Entities/Entity.hpp +++ b/include/Entities/Entity.hpp @@ -32,7 +32,7 @@ namespace Entities { std::string SensorName; bool isActive; SimCore::Identifier SensorID; - std::shared_ptr SensorSender; + // std::shared_ptr SensorSender; }; struct EffectorClientData diff --git a/include/Entities/Tracklist/Tracklist.hpp b/include/Entities/Tracklist/Tracklist.hpp index 1ce43b7..8daacf1 100644 --- a/include/Entities/Tracklist/Tracklist.hpp +++ b/include/Entities/Tracklist/Tracklist.hpp @@ -28,6 +28,8 @@ namespace TrackList SimCore::Identifier getTrackID(SimCore::ObjectSource source); + void addTrack(std::shared_ptr track); + void addTrack(std::shared_ptr track,SensorData sensorData); std::shared_ptr getTrack(SimCore::Identifier TrackID); @@ -45,7 +47,8 @@ namespace TrackList void tracklistSanitizer(); void addNewTrack(std::shared_ptr track,SensorData sensorData); - + void addNewTrack(std::shared_ptr track); + std::map> TrackList_; mutable std::mutex mutex_; diff --git a/include/Entities/Tracklist/TracklistItem.hpp b/include/Entities/Tracklist/TracklistItem.hpp index eacfde6..442342d 100644 --- a/include/Entities/Tracklist/TracklistItem.hpp +++ b/include/Entities/Tracklist/TracklistItem.hpp @@ -32,6 +32,7 @@ namespace TrackList { { public: TracklistItem(std::shared_ptr track,SensorData sensorData); + TracklistItem(std::shared_ptr track); SimCore::Identifier getID(); @@ -56,10 +57,13 @@ namespace TrackList { void updateTrack(std::shared_ptr track,SensorData sensorData); + void updateTrack(std::shared_ptr track); + bool checkIfSensorIDIsIn(SimCore::Identifier SensorTrackID); bool isSensorIDKnown(SimCore::Identifier); + void addSensorDataToSensorList(SensorData sensorData); private: @@ -90,7 +94,6 @@ namespace TrackList { bool isSensorinSensorlist(SensorData sensorData); - void addSensorDataToSensorList(SensorData sensorData); diff --git a/libs/SimCore b/libs/SimCore index f83fabd..d4c12f3 160000 --- a/libs/SimCore +++ b/libs/SimCore @@ -1 +1 @@ -Subproject commit f83fabd343e690a62a794f3cb6db5cf46f72068b +Subproject commit d4c12f3b092f30d6218f0c0a4c2eec2f619aaf96 diff --git a/src/Entities/Tracklist/TrackListItem.cpp b/src/Entities/Tracklist/TrackListItem.cpp index c5bf7d9..fc32138 100644 --- a/src/Entities/Tracklist/TrackListItem.cpp +++ b/src/Entities/Tracklist/TrackListItem.cpp @@ -15,6 +15,13 @@ namespace TrackList { updateTrack(track,sensorData); addSensorDataToSensorList(sensorData); + } + + TracklistItem::TracklistItem(std::shared_ptr track):trackID_(track->getIdentifier()) + { + + updateTrack(track); + } SimCore::Identifier TracklistItem::getID() @@ -86,7 +93,7 @@ namespace TrackList { { auto trackKind = track->getTrackkind(); - if (trackKind == SimCore::TrackKind::RADAR_TRACK) { + if (trackKind == SimCore::TrackKind::RADAR_TRACK | trackKind == SimCore::TrackKind::GROUND_TRUTH_TRACK) { std::shared_ptr radarTrack = std::dynamic_pointer_cast(track); position_ = radarTrack->getPostion(); @@ -103,6 +110,27 @@ namespace TrackList { addSensorDataToSensorList(sensorData); } + } + + void TracklistItem::updateTrack(std::shared_ptr track ) + { + + auto trackKind = track->getTrackkind(); + if (trackKind == SimCore::TrackKind::RADAR_TRACK | trackKind == SimCore::TrackKind::GROUND_TRUTH_TRACK) { + std::shared_ptr radarTrack = std::dynamic_pointer_cast(track); + + position_ = radarTrack->getPostion(); + range_ = radarTrack->getRange(); + bearing_ = radarTrack->getBearing(); + course_ = radarTrack->getCourse(); + speed_ = radarTrack->getSpeed(); + lastUpdateTimestamp_ = std::chrono::steady_clock::now(); + + + } + + + } diff --git a/src/Entities/Tracklist/Tracklist.cpp b/src/Entities/Tracklist/Tracklist.cpp index 7b700d6..77fa140 100644 --- a/src/Entities/Tracklist/Tracklist.cpp +++ b/src/Entities/Tracklist/Tracklist.cpp @@ -67,6 +67,44 @@ namespace TrackList addNewTrack( track, sensorData); + } + + } + + } + } + + /// @brief + /// @param track + void TrackList::addTrack(std::shared_ptr track) + { + + auto AllIDs = getAllIDs(); + // std::unique_lock lock(mutex_); + // lock.unlock(); + + if (AllIDs.size() == 0) { + addNewTrack( track); + } + else + { + for (auto ID:AllIDs) { + // std::lock_guard lock(mutex_); + + auto TracklistItem = TrackList_.find(ID.serialize()); + + if (TracklistItem != TrackList_.end()) { + + TracklistItem->second->updateTrack(track); + + } + else + { + // lock.unlock(); + + addNewTrack( track); + + } } @@ -87,6 +125,15 @@ namespace TrackList std::string id = track->getIdentifier().serialize(); TrackList_.emplace(id,item); } + + void TrackList::addNewTrack(std::shared_ptr track) + { + std::lock_guard lock(mutex_); + + auto item = std::make_shared( track); + std::string id = track->getIdentifier().serialize(); + TrackList_.emplace(id,item); + } std::shared_ptr TrackList::getTrack(SimCore::Identifier TrackID)