@@ -22,7 +22,6 @@ namespace agent {
2222
2323Agent::Agent ()
2424 : xrce_dds_agent_instance_(xrce_dds_agent_instance_.getInstance())
25- , graph_manager_(nullptr )
2625{
2726}
2827
@@ -33,8 +32,6 @@ bool Agent::create(
3332 bool result = xrce_dds_agent_instance_.create (argc, argv);
3433 if (result)
3534 {
36- graph_manager_.reset (new graph_manager::GraphManager ());
37-
3835 /* *
3936 * Add CREATE_PARTICIPANT callback.
4037 */
@@ -43,6 +40,12 @@ bool Agent::create(
4340 ([&](
4441 const eprosima::fastdds::dds::DomainParticipant* participant) -> void
4542 {
43+ auto graph_manager_ =
44+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
45+ participant->get_domain_id ()
46+ )
47+ );
48+
4649 graph_manager_->add_participant (participant);
4750 });
4851 xrce_dds_agent_instance_.add_middleware_callback (
@@ -58,6 +61,12 @@ bool Agent::create(
5861 ([&](
5962 const eprosima::fastdds::dds::DomainParticipant* participant) -> void
6063 {
64+ auto graph_manager_ =
65+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
66+ participant->get_domain_id ()
67+ )
68+ );
69+
6170 graph_manager_->remove_participant (participant->guid ());
6271 });
6372 xrce_dds_agent_instance_.add_middleware_callback (
@@ -75,6 +84,12 @@ bool Agent::create(
7584 const eprosima::fastdds::dds::DomainParticipant* participant,
7685 const eprosima::fastdds::dds::DataWriter* datawriter) -> void
7786 {
87+ auto graph_manager_ =
88+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
89+ participant->get_domain_id ()
90+ )
91+ );
92+
7893 // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
7994 const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
8095 datawriter->get_instance_handle ();
@@ -96,9 +111,16 @@ bool Agent::create(
96111 const eprosima::fastdds::dds::DomainParticipant *,
97112 const eprosima::fastdds::dds::DataWriter *)> on_delete_datawriter
98113 ([&](
99- const eprosima::fastdds::dds::DomainParticipant* /* participant*/ ,
114+ const eprosima::fastdds::dds::DomainParticipant* participant,
100115 const eprosima::fastdds::dds::DataWriter* datawriter) -> void
101116 {
117+
118+ auto graph_manager_ =
119+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
120+ participant->get_domain_id ()
121+ )
122+ );
123+
102124 // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
103125 const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
104126 datawriter->get_instance_handle ();
@@ -122,6 +144,12 @@ bool Agent::create(
122144 const eprosima::fastdds::dds::DomainParticipant* participant,
123145 const eprosima::fastdds::dds::DataReader* datareader) -> void
124146 {
147+ auto graph_manager_ =
148+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
149+ participant->get_domain_id ()
150+ )
151+ );
152+
125153 // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
126154 const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
127155 datareader->get_instance_handle ();
@@ -143,9 +171,15 @@ bool Agent::create(
143171 const eprosima::fastdds::dds::DomainParticipant *,
144172 const eprosima::fastdds::dds::DataReader *)> on_delete_datareader
145173 ([&](
146- const eprosima::fastdds::dds::DomainParticipant* /* participant*/ ,
174+ const eprosima::fastdds::dds::DomainParticipant* participant,
147175 const eprosima::fastdds::dds::DataReader* datareader) -> void
148176 {
177+ auto graph_manager_ =
178+ find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t (
179+ participant->get_domain_id ()
180+ )
181+ );
182+
149183 // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
150184 const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
151185 datareader->get_instance_handle ();
@@ -168,6 +202,25 @@ void Agent::run()
168202 return xrce_dds_agent_instance_.run ();
169203}
170204
205+ std::shared_ptr<graph_manager::GraphManager> Agent::find_or_create_graph_manager (eprosima::fastdds::dds::DomainId_t domain_id)
206+ {
207+ auto it = graph_manager_map_.find (domain_id);
208+
209+ if (it != graph_manager_map_.end ()) {
210+ return it->second ;
211+ }else {
212+ return graph_manager_map_.insert (
213+ std::pair<
214+ eprosima::fastdds::dds::DomainId_t,
215+ std::shared_ptr<graph_manager::GraphManager>
216+ >(
217+ domain_id,
218+ std::make_shared<graph_manager::GraphManager>(domain_id)
219+ )
220+ ).first ->second ;
221+ }
222+ }
223+
171224} // namespace agent
172225} // namespace uros
173226#endif // _UROS_AGENT_AGENT_CPP
0 commit comments