diff --git a/include/fastdds/rtps/participant/RTPSParticipantListener.h b/include/fastdds/rtps/participant/RTPSParticipantListener.h index 0e7406261e3..6801a1ae22d 100644 --- a/include/fastdds/rtps/participant/RTPSParticipantListener.h +++ b/include/fastdds/rtps/participant/RTPSParticipantListener.h @@ -46,21 +46,6 @@ class FASTDDS_EXPORTED_API RTPSParticipantListener { } - /*! - * This method is called when a new Participant is discovered, or a previously discovered participant changes - * its QOS or is removed. - * - * @param[out] participant Pointer to the Participant which discovered the remote participant. - * @param[out] info Remote participant information. User can take ownership of the object. - */ - virtual void onParticipantDiscovery( - RTPSParticipant* participant, - ParticipantDiscoveryInfo&& info) - { - static_cast(participant); - static_cast(info); - } - /*! * This method is called when a new Participant is discovered, or a previously discovered participant changes * its QOS or is removed. @@ -74,7 +59,9 @@ class FASTDDS_EXPORTED_API RTPSParticipantListener ParticipantDiscoveryInfo&& info, bool& should_be_ignored) { - onParticipantDiscovery(participant, std::move(info)); + static_cast(participant); + static_cast(info); + should_be_ignored = false; } @@ -89,21 +76,6 @@ class FASTDDS_EXPORTED_API RTPSParticipantListener #endif // if HAVE_SECURITY - /*! - * This method is called when a new Reader is discovered, or a previously discovered reader changes - * its QOS or is removed. - * - * @param[out] participant Pointer to the Participant which discovered the remote reader. - * @param[out] info Remote reader information. User can take ownership of the object. - */ - virtual void onReaderDiscovery( - RTPSParticipant* participant, - ReaderDiscoveryInfo&& info) - { - static_cast(participant); - static_cast(info); - } - /*! * This method is called when a new Reader is discovered, or a previously discovered reader changes * its QOS or is removed. @@ -119,22 +91,7 @@ class FASTDDS_EXPORTED_API RTPSParticipantListener { static_cast(participant); static_cast(info); - static_cast(should_be_ignored); - } - - /*! - * This method is called when a new Writer is discovered, or a previously discovered writer changes - * its QOS or is removed. - * - * @param[out] participant Pointer to the Participant which discovered the remote writer. - * @param[out] info Remote writer information. User can take ownership of the object. - */ - virtual void onWriterDiscovery( - RTPSParticipant* participant, - WriterDiscoveryInfo&& info) - { - static_cast(participant); - static_cast(info); + should_be_ignored = false; } /*! @@ -152,7 +109,7 @@ class FASTDDS_EXPORTED_API RTPSParticipantListener { static_cast(participant); static_cast(info); - static_cast(should_be_ignored); + should_be_ignored = false; } }; diff --git a/src/cpp/fastdds/domain/DomainParticipantImpl.cpp b/src/cpp/fastdds/domain/DomainParticipantImpl.cpp index 8d55d7c029f..8135b7aa131 100644 --- a/src/cpp/fastdds/domain/DomainParticipantImpl.cpp +++ b/src/cpp/fastdds/domain/DomainParticipantImpl.cpp @@ -1558,27 +1558,37 @@ void DomainParticipantImpl::MyRTPSParticipantListener::onParticipantAuthenticati void DomainParticipantImpl::MyRTPSParticipantListener::onReaderDiscovery( RTPSParticipant*, - ReaderDiscoveryInfo&& info) + ReaderDiscoveryInfo&& info, + bool& should_be_ignored) { + should_be_ignored = false; + Sentry sentinel(this); if (sentinel) { - bool should_be_ignored = false; - participant_->listener_->on_data_reader_discovery(participant_->participant_, std::move(info), - should_be_ignored); + DomainParticipantListener* listener = participant_->listener_; + if (nullptr != listener) + { + listener->on_data_reader_discovery(participant_->participant_, std::move(info), should_be_ignored); + } } } void DomainParticipantImpl::MyRTPSParticipantListener::onWriterDiscovery( RTPSParticipant*, - WriterDiscoveryInfo&& info) + WriterDiscoveryInfo&& info, + bool& should_be_ignored) { + should_be_ignored = false; + Sentry sentinel(this); if (sentinel) { - bool should_be_ignored = false; - participant_->listener_->on_data_writer_discovery(participant_->participant_, std::move(info), - should_be_ignored); + DomainParticipantListener* listener = participant_->listener_; + if (nullptr != listener) + { + listener->on_data_writer_discovery(participant_->participant_, std::move(info), should_be_ignored); + } } } diff --git a/src/cpp/fastdds/domain/DomainParticipantImpl.hpp b/src/cpp/fastdds/domain/DomainParticipantImpl.hpp index 6b7991bcc4d..bf93ed1338b 100644 --- a/src/cpp/fastdds/domain/DomainParticipantImpl.hpp +++ b/src/cpp/fastdds/domain/DomainParticipantImpl.hpp @@ -624,10 +624,6 @@ class DomainParticipantImpl bool on_guard_; }; - using fastrtps::rtps::RTPSParticipantListener::onParticipantDiscovery; - using fastrtps::rtps::RTPSParticipantListener::onReaderDiscovery; - using fastrtps::rtps::RTPSParticipantListener::onWriterDiscovery; - public: MyRTPSParticipantListener( @@ -654,11 +650,13 @@ class DomainParticipantImpl void onReaderDiscovery( fastrtps::rtps::RTPSParticipant* participant, - fastrtps::rtps::ReaderDiscoveryInfo&& info) override; + fastrtps::rtps::ReaderDiscoveryInfo&& info, + bool& should_be_ignored) override; void onWriterDiscovery( fastrtps::rtps::RTPSParticipant* participant, - fastrtps::rtps::WriterDiscoveryInfo&& info) override; + fastrtps::rtps::WriterDiscoveryInfo&& info, + bool& should_be_ignored) override; DomainParticipantImpl* participant_; int callback_counter_ = 0; diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp index 9ac865a440b..94588faabb3 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp @@ -705,9 +705,11 @@ bool PDP::removeReaderProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); ReaderDiscoveryInfo info(std::move(*pR)); + bool should_be_ignored = false; info.status = ReaderDiscoveryInfo::REMOVED_READER; - listener->onReaderDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onReaderDiscovery(participant, std::move(info), should_be_ignored); } // Clear reader proxy data and move to pool in order to allow reuse @@ -749,9 +751,11 @@ bool PDP::removeWriterProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); WriterDiscoveryInfo info(std::move(*pW)); + bool should_be_ignored = false; info.status = WriterDiscoveryInfo::REMOVED_WRITER; - listener->onWriterDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onWriterDiscovery(participant, std::move(info), should_be_ignored); } // Clear writer proxy data and move to pool in order to allow reuse @@ -841,9 +845,11 @@ ReaderProxyData* PDP::addReaderProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); ReaderDiscoveryInfo info(*ret_val); + bool should_be_ignored = false; info.status = ReaderDiscoveryInfo::CHANGED_QOS_READER; - listener->onReaderDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onReaderDiscovery(participant, std::move(info), should_be_ignored); } return ret_val; @@ -891,9 +897,11 @@ ReaderProxyData* PDP::addReaderProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); ReaderDiscoveryInfo info(*ret_val); + bool should_be_ignored = false; info.status = ReaderDiscoveryInfo::DISCOVERED_READER; - listener->onReaderDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onReaderDiscovery(participant, std::move(info), should_be_ignored); } return ret_val; @@ -938,9 +946,11 @@ WriterProxyData* PDP::addWriterProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); WriterDiscoveryInfo info(*ret_val); + bool should_be_ignored = false; info.status = WriterDiscoveryInfo::CHANGED_QOS_WRITER; - listener->onWriterDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onWriterDiscovery(participant, std::move(info), should_be_ignored); } return ret_val; @@ -987,9 +997,11 @@ WriterProxyData* PDP::addWriterProxyData( RTPSParticipantListener* listener = mp_RTPSParticipant->getListener(); if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); WriterDiscoveryInfo info(*ret_val); + bool should_be_ignored = false; info.status = WriterDiscoveryInfo::DISCOVERED_WRITER; - listener->onWriterDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onWriterDiscovery(participant, std::move(info), should_be_ignored); } return ret_val; @@ -1198,9 +1210,11 @@ void PDP::actions_on_remote_participant_removed( if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); ReaderDiscoveryInfo info(std::move(*rit)); + bool should_be_ignored = false; info.status = ReaderDiscoveryInfo::REMOVED_READER; - listener->onReaderDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onReaderDiscovery(participant, std::move(info), should_be_ignored); } } } @@ -1215,9 +1229,11 @@ void PDP::actions_on_remote_participant_removed( if (listener) { + RTPSParticipant* participant = mp_RTPSParticipant->getUserRTPSParticipant(); WriterDiscoveryInfo info(std::move(*wit)); + bool should_be_ignored = false; info.status = WriterDiscoveryInfo::REMOVED_WRITER; - listener->onWriterDiscovery(mp_RTPSParticipant->getUserRTPSParticipant(), std::move(info)); + listener->onWriterDiscovery(participant, std::move(info), should_be_ignored); } } } diff --git a/test/mock/rtps/RTPSParticipantImpl/rtps/participant/RTPSParticipantImpl.h b/test/mock/rtps/RTPSParticipantImpl/rtps/participant/RTPSParticipantImpl.h index ec5933e2d4b..958bf83fc24 100644 --- a/test/mock/rtps/RTPSParticipantImpl/rtps/participant/RTPSParticipantImpl.h +++ b/test/mock/rtps/RTPSParticipantImpl/rtps/participant/RTPSParticipantImpl.h @@ -68,15 +68,6 @@ class MockParticipantListener : public RTPSParticipantListener { public: - void onParticipantDiscovery( - RTPSParticipant* participant, - ParticipantDiscoveryInfo&& info) override - { - onParticipantDiscovery_mock(participant, info); - } - - MOCK_METHOD2(onParticipantDiscovery_mock, void (RTPSParticipant*, const ParticipantDiscoveryInfo&)); - void onParticipantDiscovery( RTPSParticipant* participant, ParticipantDiscoveryInfo&& info,