Holoscan SDK v4.2.0

Program Listing for File fastdds_discovery.hpp

Return to documentation for file (include/holoscan/pubsub/fastdds/pubsub/fastdds_discovery.hpp)

Copy
Copied!
            

/* * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef HOLOSCAN_PUBSUB_FASTDDS_PUBSUB_FASTDDS_DISCOVERY_HPP #define HOLOSCAN_PUBSUB_FASTDDS_PUBSUB_FASTDDS_DISCOVERY_HPP #include <memory> #include <mutex> #include <string> #include <unordered_map> #include <vector> #include <fastdds/dds/domain/DomainParticipant.hpp> #include <fastdds/dds/domain/DomainParticipantListener.hpp> #include <fastdds/rtps/builtin/data/ParticipantBuiltinTopicData.hpp> #include <fastdds/rtps/builtin/data/PublicationBuiltinTopicData.hpp> #include <fastdds/rtps/builtin/data/SubscriptionBuiltinTopicData.hpp> #include <fastdds/rtps/participant/ParticipantDiscoveryInfo.hpp> #include <fastdds/rtps/reader/ReaderDiscoveryStatus.hpp> #include <fastdds/rtps/writer/WriterDiscoveryStatus.hpp> #include <gxf/pubsub/endpoint_info.hpp> #include <gxf/pubsub/pubsub_discovery.hpp> namespace holoscan { // Forward declarations class FastDdsPubSubContext; class FastDdsDiscovery : public nvidia::gxf::PubSubDiscovery { public: explicit FastDdsDiscovery(FastDdsPubSubContext* context); ~FastDdsDiscovery() override; // Delete copy operations FastDdsDiscovery(const FastDdsDiscovery&) = delete; FastDdsDiscovery& operator=(const FastDdsDiscovery&) = delete; //---------------------------------------------------------------------------- // PubSubDiscovery Lifecycle //---------------------------------------------------------------------------- nvidia::gxf::Expected<void> initialize() override; nvidia::gxf::Expected<void> shutdown() override; bool is_initialized() const override; //---------------------------------------------------------------------------- // Discovery Model //---------------------------------------------------------------------------- nvidia::gxf::DiscoveryModel discovery_model() const override { return nvidia::gxf::DiscoveryModel::kDecentralizedPassive; } //---------------------------------------------------------------------------- // PubSubDiscovery Registration //---------------------------------------------------------------------------- nvidia::gxf::Expected<void> announce_publisher(const nvidia::gxf::PublisherInfo& info) override; nvidia::gxf::Expected<void> announce_subscriber(const nvidia::gxf::SubscriberInfo& info) override; //---------------------------------------------------------------------------- // PubSubDiscovery Deregistration //---------------------------------------------------------------------------- nvidia::gxf::Expected<void> remove_publisher(const nvidia::gxf::PublisherGid& gid) override; nvidia::gxf::Expected<void> remove_subscriber(const nvidia::gxf::SubscriberGid& gid) override; //---------------------------------------------------------------------------- // PubSubDiscovery Query //---------------------------------------------------------------------------- nvidia::gxf::Expected<std::vector<nvidia::gxf::PublisherInfo>> query_publishers( const std::string& topic_name) override; nvidia::gxf::Expected<std::vector<nvidia::gxf::SubscriberInfo>> query_subscribers( const std::string& topic_name) override; nvidia::gxf::Expected<std::vector<std::string>> get_all_topics() override; //---------------------------------------------------------------------------- // PubSubDiscovery Callbacks //---------------------------------------------------------------------------- void set_on_publisher_discovered(PublisherDiscoveredCallback callback) override; void set_on_subscriber_discovered(SubscriberDiscoveredCallback callback) override; void set_on_publisher_lost(PublisherLostCallback callback) override; void set_on_subscriber_lost(SubscriberLostCallback callback) override; //---------------------------------------------------------------------------- // Native Buffer Capability Advertisement //---------------------------------------------------------------------------- void set_local_native_capability(const nvidia::gxf::NativeBufferCapability& cap) { std::lock_guard<std::mutex> lock(mutex_); local_native_capability_ = cap; } nvidia::gxf::NativeBufferCapability local_native_capability(int device_id = -1) const override { std::lock_guard<std::mutex> lock(mutex_); if (device_id < 0 || !local_native_capability_.supports_native_buffers()) { return local_native_capability_; } // Build a capability for the requested device by looking up its UUID. return capability_for_device(device_id); } static std::vector<uint8_t> serialize_native_capability( const nvidia::gxf::NativeBufferCapability& cap); static nvidia::gxf::NativeBufferCapability parse_native_capability( const std::vector<uint8_t>& user_data); private: class DiscoveryListener; static nvidia::gxf::Gid guid_to_gid(const eprosima::fastdds::rtps::GUID_t& guid); FastDdsPubSubContext* context_; bool initialized_ = false; // Discovered remote endpoints (from DDS SEDP listener callbacks). // Local endpoints are tracked by the shared TopicRegistry (set by PubSubContext // via set_topic_registry()), so we don't need separate local_publishers_/ // local_subscribers_ maps. std::unordered_map<nvidia::gxf::Gid, nvidia::gxf::NativeBufferCapability> discovered_participant_capabilities_; std::unordered_map<nvidia::gxf::Gid, nvidia::gxf::PublisherInfo> discovered_publishers_; std::unordered_map<nvidia::gxf::Gid, nvidia::gxf::SubscriberInfo> discovered_subscribers_; mutable std::mutex mutex_; // Callbacks PublisherDiscoveredCallback on_publisher_discovered_; SubscriberDiscoveredCallback on_subscriber_discovered_; PublisherLostCallback on_publisher_lost_; SubscriberLostCallback on_subscriber_lost_; // DDS listener std::unique_ptr<DiscoveryListener> listener_; nvidia::gxf::NativeBufferCapability capability_for_device(int device_id) const; // Local native buffer capability (set before initialize) nvidia::gxf::NativeBufferCapability local_native_capability_; }; } // namespace holoscan #endif// HOLOSCAN_PUBSUB_FASTDDS_PUBSUB_FASTDDS_DISCOVERY_HPP

© Copyright 2022-2026, NVIDIA. Last updated on May 29, 2026