Update graph manager

This commit is contained in:
Antonio cuadros
2021-07-27 10:31:07 +02:00
parent 9564b943ee
commit f7fca51e2e
3 changed files with 29 additions and 45 deletions
@@ -80,29 +80,16 @@ public:
/** /**
* @brief Default destructor. * @brief Default destructor.
*/ */
~GraphManager() ~GraphManager() = default;
void stop()
{ {
graphCache_.clear_on_change_callback();
exit = true;
cv_.notify_one();
if (microros_graph_publisher_.joinable()) if (microros_graph_publisher_.joinable())
{ {
exit = true;
cv_.notify_one();
microros_graph_publisher_.join(); microros_graph_publisher_.join();
} }
subscriber_->delete_datareader(ros_discovery_datareader_);
publisher_->delete_datawriter(ros_to_microros_graph_datawriter_);
participant_->delete_subscriber(subscriber_);
participant_->delete_publisher(publisher_);
// Delete topics
participant_->delete_topic(ros_discovery_topic_);
participant_->delete_topic(ros_to_microros_graph_topic_);
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
} }
/** /**
@@ -302,11 +289,11 @@ private:
eprosima::fastdds::dds::DataWriterQos datawriter_qos_; eprosima::fastdds::dds::DataWriterQos datawriter_qos_;
rmw_dds_common::GraphCache graphCache_; rmw_dds_common::GraphCache graphCache_;
std::unique_ptr<ParticipantListener> participant_listener_; ParticipantListener participant_listener_;
std::unique_ptr<DatareaderListener> datareader_listener_; DatareaderListener datareader_listener_;
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> participant_info_typesupport_; eprosima::fastdds::dds::TypeSupport participant_info_typesupport_;
std::unique_ptr<eprosima::fastdds::dds::TypeSupport> microros_graph_info_typesupport_; eprosima::fastdds::dds::TypeSupport microros_graph_info_typesupport_;
eprosima::fastdds::dds::DomainParticipant* participant_; eprosima::fastdds::dds::DomainParticipant* participant_;
eprosima::fastdds::dds::Publisher* publisher_; eprosima::fastdds::dds::Publisher* publisher_;
eprosima::fastdds::dds::Subscriber* subscriber_; eprosima::fastdds::dds::Subscriber* subscriber_;
+8 -11
View File
@@ -35,8 +35,6 @@ bool Agent::create(
int argc, int argc,
char** argv) char** argv)
{ {
stop();
bool result = xrce_dds_agent_instance_.create(argc, argv); bool result = xrce_dds_agent_instance_.create(argc, argv);
if (result && !initialized) if (result && !initialized)
@@ -190,22 +188,21 @@ void Agent::run()
void Agent::stop() void Agent::stop()
{ {
xrce_dds_agent_instance_.stop(); xrce_dds_agent_instance_.stop();
graph_manager_map_.clear();
for (auto & element : graph_manager_map_)
{
element.second.stop();
}
} }
std::shared_ptr<graph_manager::GraphManager> Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id) graph_manager::GraphManager* Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id)
{ {
auto it = graph_manager_map_.find(domain_id); auto it = graph_manager_map_.find(domain_id);
if (it != graph_manager_map_.end()) { if (it != graph_manager_map_.end()) {
return it->second; return &it->second;
}else{ }else{
return graph_manager_map_.insert( return &graph_manager_map_.emplace(domain_id, domain_id).first->second;
std::make_pair(
domain_id,
std::make_shared<graph_manager::GraphManager>(domain_id)
)
).first->second;
} }
} }
@@ -28,14 +28,14 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
, mtx_() , mtx_()
, cv_() , cv_()
, graphCache_() , graphCache_()
, participant_listener_(std::make_unique<ParticipantListener>(this)) , participant_listener_(this)
, datareader_listener_(std::make_unique<DatareaderListener>(this)) , datareader_listener_(this)
, participant_info_typesupport_(std::make_unique< , participant_info_typesupport_()
eprosima::fastdds::dds::TypeSupport>(new graph_manager::ParticipantEntitiesInfoTypeSupport())) , microros_graph_info_typesupport_()
, microros_graph_info_typesupport_(std::make_unique<
eprosima::fastdds::dds::TypeSupport>(new graph_manager::MicrorosGraphInfoTypeSupport()))
{ {
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles(); eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles();
participant_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::ParticipantEntitiesInfoTypeSupport();
microros_graph_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::MicrorosGraphInfoTypeSupport();
// Create DomainParticipant // Create DomainParticipant
eprosima::fastdds::dds::DomainParticipantQos participant_qos = eprosima::fastdds::dds::DomainParticipantQos participant_qos =
@@ -55,11 +55,11 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none(); eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none();
participant_ = eprosima::fastdds::dds::DomainParticipantFactory::get_instance()-> participant_ = eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->
create_participant(domain_id_, participant_qos, participant_listener_.get(), par_mask); create_participant(domain_id_, participant_qos, &participant_listener_, par_mask);
// Register participant within typesupport // Register participant within typesupport
participant_->register_type(*participant_info_typesupport_); participant_->register_type(participant_info_typesupport_);
participant_->register_type(*microros_graph_info_typesupport_); participant_->register_type(microros_graph_info_typesupport_);
// Create publisher // Create publisher
publisher_ = participant_->create_publisher( publisher_ = participant_->create_publisher(
@@ -71,11 +71,11 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
// Create topics // Create topics
ros_discovery_topic_ = participant_->create_topic("ros_discovery_info", ros_discovery_topic_ = participant_->create_topic("ros_discovery_info",
participant_info_typesupport_->get_type_name(), participant_info_typesupport_.get_type_name(),
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT); eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
ros_to_microros_graph_topic_ = participant_->create_topic("ros_to_microros_graph", ros_to_microros_graph_topic_ = participant_->create_topic("ros_to_microros_graph",
microros_graph_info_typesupport_->get_type_name(), microros_graph_info_typesupport_.get_type_name(),
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT); eprosima::fastdds::dds::TOPIC_QOS_DEFAULT);
// Create datawriters // Create datawriters
@@ -116,7 +116,7 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
ros_discovery_datareader_ = ros_discovery_datareader_ =
subscriber_->create_datareader(ros_discovery_topic_, subscriber_->create_datareader(ros_discovery_topic_,
datareader_qos, datareader_listener_.get()); datareader_qos, &datareader_listener_);
// Set graph cache on change callback function // Set graph cache on change callback function
graphCache_.set_on_change_callback([this]() graphCache_.set_on_change_callback([this]()