@@ -54,14 +54,27 @@ std::shared_ptr<ddspipe::core::IReader> SpyDdsParticipant::create_reader(
5454 return ddspipe::participants::DynTypesParticipant::create_reader (topic);
5555}
5656
57- void SpyDdsParticipant::on_participant_discovery (
57+ SpyDdsParticipant::SpyDdsParticipantListener::SpyDdsParticipantListener (
58+ std::shared_ptr<ddspipe::participants::ParticipantConfiguration> conf,
59+ std::shared_ptr<ddspipe::core::DiscoveryDatabase> ddb,
60+ std::shared_ptr<ddspipe::participants::InternalReader> type_object_reader,
61+ std::shared_ptr<ddspipe::participants::InternalReader> participants_reader,
62+ std::shared_ptr<ddspipe::participants::InternalReader> endpoints_reader)
63+ : ddspipe::participants::DynTypesParticipant::DynTypesRtpsListener(conf, ddb, type_object_reader)
64+ {
65+ // Set the internal readers
66+ participants_reader_ = participants_reader;
67+ endpoints_reader_ = endpoints_reader;
68+ }
69+
70+ void SpyDdsParticipant::SpyDdsParticipantListener::on_participant_discovery (
5871 fastdds::rtps::RTPSParticipant* participant,
5972 fastdds::rtps::ParticipantDiscoveryStatus reason,
6073 const fastdds::rtps::ParticipantBuiltinTopicData& info,
6174 bool & should_be_ignored)
6275{
6376 // If comes from this participant is not interesting
64- if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , rtps_participant_ ->getGuid ()))
77+ if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , participant ->getGuid ()))
6578 {
6679 return ;
6780 }
@@ -72,55 +85,57 @@ void SpyDdsParticipant::on_participant_discovery(
7285 participant_info.name = std::string (info.participant_name );
7386 participant_info.guid = info.guid ;
7487
75- ddspipe::participants::rtps::CommonParticipant::on_participant_discovery (participant, reason, info,
88+ ddspipe::participants::rtps::CommonParticipant::RtpsListener:: on_participant_discovery (participant, reason, info,
7689 should_be_ignored);
7790
7891 internal_notify_participant_discovered_ (participant_info);
7992}
8093
81- void SpyDdsParticipant::on_reader_discovery (
94+ void SpyDdsParticipant::SpyDdsParticipantListener:: on_reader_discovery (
8295 fastdds::rtps::RTPSParticipant* participant,
8396 fastdds::rtps::ReaderDiscoveryStatus reason,
8497 const fastdds::rtps::SubscriptionBuiltinTopicData& info,
8598 bool & should_be_ignored)
8699{
87100 // If comes from this participant is not interesting
88- if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , rtps_participant_ ->getGuid ()))
101+ if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , participant ->getGuid ()))
89102 {
90103 return ;
91104 }
92105
93- EndpointInfo endpoint_info = ddspipe::participants::detail::create_endpoint_from_info_ (info, id () );
106+ EndpointInfo endpoint_info = ddspipe::participants::detail::create_endpoint_from_info_ (info, configuration_-> id );
94107 endpoint_info.active = (reason == fastdds::rtps::ReaderDiscoveryStatus::DISCOVERED_READER
95108 || reason == fastdds::rtps::ReaderDiscoveryStatus::CHANGED_QOS_READER );
96109
97- ddspipe::participants::DynTypesParticipant::on_reader_discovery (participant, reason, info, should_be_ignored);
110+ ddspipe::participants::DynTypesParticipant::DynTypesRtpsListener::on_reader_discovery (participant, reason, info,
111+ should_be_ignored);
98112
99113 internal_notify_endpoint_discovered_ (endpoint_info);
100114}
101115
102- void SpyDdsParticipant::on_writer_discovery (
116+ void SpyDdsParticipant::SpyDdsParticipantListener:: on_writer_discovery (
103117 fastdds::rtps::RTPSParticipant* participant,
104118 fastdds::rtps::WriterDiscoveryStatus reason,
105119 const fastdds::rtps::PublicationBuiltinTopicData& info,
106120 bool & should_be_ignored)
107121{
108122 // If comes from this participant is not interesting
109- if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , rtps_participant_ ->getGuid ()))
123+ if (ddspipe::participants::detail::come_from_same_participant_ (info.guid , participant ->getGuid ()))
110124 {
111125 return ;
112126 }
113127
114- EndpointInfo endpoint_info = ddspipe::participants::detail::create_endpoint_from_info_ (info, id () );
128+ EndpointInfo endpoint_info = ddspipe::participants::detail::create_endpoint_from_info_ (info, configuration_-> id );
115129 endpoint_info.active = (reason == fastdds::rtps::WriterDiscoveryStatus::DISCOVERED_WRITER
116130 || reason == fastdds::rtps::WriterDiscoveryStatus::CHANGED_QOS_WRITER );
117131
118- ddspipe::participants::DynTypesParticipant::on_writer_discovery (participant, reason, info, should_be_ignored);
132+ ddspipe::participants::DynTypesParticipant::DynTypesRtpsListener::on_writer_discovery (participant, reason, info,
133+ should_be_ignored);
119134
120135 internal_notify_endpoint_discovered_ (endpoint_info);
121136}
122137
123- void SpyDdsParticipant::internal_notify_participant_discovered_ (
138+ void SpyDdsParticipant::SpyDdsParticipantListener:: internal_notify_participant_discovered_ (
124139 const ParticipantInfo& participant_discovered)
125140{
126141 // Create data containing Dynamic Type
@@ -131,7 +146,7 @@ void SpyDdsParticipant::internal_notify_participant_discovered_(
131146 participants_reader_->simulate_data_reception (std::move (data));
132147}
133148
134- void SpyDdsParticipant::internal_notify_endpoint_discovered_ (
149+ void SpyDdsParticipant::SpyDdsParticipantListener:: internal_notify_endpoint_discovered_ (
135150 const EndpointInfo& endpoint_discovered)
136151{
137152 // Create data containing Dynamic Type
@@ -142,6 +157,14 @@ void SpyDdsParticipant::internal_notify_endpoint_discovered_(
142157 endpoints_reader_->simulate_data_reception (std::move (data));
143158}
144159
160+ std::unique_ptr<fastdds::rtps::RTPSParticipantListener> SpyDdsParticipant::create_listener_ ()
161+ {
162+ // We pass the configuration_ and discovery_database_ attributes from this method to avoid accessing virtual
163+ // attributes in the constructor
164+ return std::make_unique<SpyDdsParticipantListener>(configuration_, discovery_database_, type_object_reader_,
165+ participants_reader_, endpoints_reader_);
166+ }
167+
145168} /* namespace participants */
146169} /* namespace spy */
147170} /* namespace eprosima */
0 commit comments