Skip to content

Commit 6a01d7d

Browse files
Update Spy Listeners (#121)
* Update Spy Listeners Signed-off-by: cferreiragonz <carlosferreira@eprosima.com> * Uncrustify Signed-off-by: cferreiragonz <carlosferreira@eprosima.com> * Apply review Signed-off-by: cferreiragonz <carlosferreira@eprosima.com> * Apply last pipe changes Signed-off-by: cferreiragonz <carlosferreira@eprosima.com> * Fix type_object_reader Signed-off-by: cferreiragonz <carlosferreira@eprosima.com> --------- Signed-off-by: cferreiragonz <carlosferreira@eprosima.com>
1 parent 4406d92 commit 6a01d7d

2 files changed

Lines changed: 87 additions & 38 deletions

File tree

fastddsspy_participants/include/fastddsspy_participants/participant/SpyDdsParticipant.hpp

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,34 +54,60 @@ class SpyDdsParticipant : public ddspipe::participants::DynTypesParticipant
5454
std::shared_ptr<ddspipe::core::IReader> create_reader(
5555
const ddspipe::core::ITopic& topic) override;
5656

57-
FASTDDSSPY_PARTICIPANTS_DllAPI
58-
void on_participant_discovery(
59-
fastdds::rtps::RTPSParticipant* participant,
60-
fastdds::rtps::ParticipantDiscoveryStatus reason,
61-
const fastdds::rtps::ParticipantBuiltinTopicData& info,
62-
bool& should_be_ignored) override;
63-
64-
FASTDDSSPY_PARTICIPANTS_DllAPI
65-
void on_reader_discovery(
66-
fastdds::rtps::RTPSParticipant* participant,
67-
fastdds::rtps::ReaderDiscoveryStatus reason,
68-
const fastdds::rtps::SubscriptionBuiltinTopicData& info,
69-
bool& should_be_ignored) override;
70-
71-
FASTDDSSPY_PARTICIPANTS_DllAPI
72-
void on_writer_discovery(
73-
fastdds::rtps::RTPSParticipant* participant,
74-
fastdds::rtps::WriterDiscoveryStatus reason,
75-
const fastdds::rtps::PublicationBuiltinTopicData& info,
76-
bool& should_be_ignored) override;
57+
class SpyDdsParticipantListener : public ddspipe::participants::DynTypesParticipant::DynTypesRtpsListener
58+
{
59+
public:
60+
61+
FASTDDSSPY_PARTICIPANTS_DllAPI
62+
explicit SpyDdsParticipantListener(
63+
std::shared_ptr<ddspipe::participants::ParticipantConfiguration> conf,
64+
std::shared_ptr<ddspipe::core::DiscoveryDatabase> ddb,
65+
std::shared_ptr<ddspipe::participants::InternalReader> type_object_reader,
66+
std::shared_ptr<ddspipe::participants::InternalReader> participants_reader,
67+
std::shared_ptr<ddspipe::participants::InternalReader> endpoints_reader);
68+
69+
FASTDDSSPY_PARTICIPANTS_DllAPI
70+
void on_participant_discovery(
71+
fastdds::rtps::RTPSParticipant* participant,
72+
fastdds::rtps::ParticipantDiscoveryStatus reason,
73+
const fastdds::rtps::ParticipantBuiltinTopicData& info,
74+
bool& should_be_ignored) override;
75+
76+
FASTDDSSPY_PARTICIPANTS_DllAPI
77+
void on_reader_discovery(
78+
fastdds::rtps::RTPSParticipant* participant,
79+
fastdds::rtps::ReaderDiscoveryStatus reason,
80+
const fastdds::rtps::SubscriptionBuiltinTopicData& info,
81+
bool& should_be_ignored) override;
82+
83+
FASTDDSSPY_PARTICIPANTS_DllAPI
84+
void on_writer_discovery(
85+
fastdds::rtps::RTPSParticipant* participant,
86+
fastdds::rtps::WriterDiscoveryStatus reason,
87+
const fastdds::rtps::PublicationBuiltinTopicData& info,
88+
bool& should_be_ignored) override;
89+
90+
protected:
91+
92+
void internal_notify_participant_discovered_(
93+
const ParticipantInfo& participant_discovered);
94+
95+
void internal_notify_endpoint_discovered_(
96+
const EndpointInfo& endpoint_discovered);
97+
98+
//! Participants Internal Reader
99+
std::shared_ptr<ddspipe::participants::InternalReader> participants_reader_;
100+
101+
//! Endpoint Internal Reader
102+
std::shared_ptr<ddspipe::participants::InternalReader> endpoints_reader_;
103+
104+
};
77105

78106
protected:
79107

80-
void internal_notify_participant_discovered_(
81-
const ParticipantInfo& participant_discovered);
82-
83-
void internal_notify_endpoint_discovered_(
84-
const EndpointInfo& endpoint_discovered);
108+
//! Override method from \c CommonParticipant to create the internal RTPS participant listener
109+
FASTDDSSPY_PARTICIPANTS_DllAPI
110+
std::unique_ptr<fastdds::rtps::RTPSParticipantListener> create_listener_() override;
85111

86112
//! Participants Internal Reader
87113
std::shared_ptr<ddspipe::participants::InternalReader> participants_reader_;

fastddsspy_participants/src/cpp/participant/SpyDdsParticipant.cpp

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)