#pragma once // FastDDS头文件 #include #include #include #include #include #include #include #include #include #include // FastDDS宏定义 #define XN_DDS eprosima::fastdds::dds namespace XNSim { template using XNDDSOptional = eprosima::fastcdr::optional; using XNDDSParticipantPtr = XN_DDS::DomainParticipant *; using XNDDSPublisherPtr = XN_DDS::Publisher *; using XNDDSSubscriberPtr = XN_DDS::Subscriber *; using XNDDSTopicPtr = XN_DDS::Topic *; using XNDDSDataWriterPtr = XN_DDS::DataWriter *; using XNDDSDataReaderPtr = XN_DDS::DataReader *; using XNDDSTypeSupport = XN_DDS::TypeSupport; using XNDDSDataWriterQos = XN_DDS::DataWriterQos; using XNDDSDataReaderQos = XN_DDS::DataReaderQos; using XNDDSParticipantQos = XN_DDS::DomainParticipantQos; using XNDDSTopicQos = XN_DDS::TopicQos; using XNDDSPublisherQos = XN_DDS::PublisherQos; using XNDDSSubscriberQos = XN_DDS::SubscriberQos; using XNDDSPublisherMap = std::unordered_map; using XNDDSSubscriberMap = std::unordered_map; using XNDDSDataWriterMap = std::unordered_map; struct PublisherInfo { XNDDSPublisherPtr publisher; XNDDSDataWriterPtr dataWriter; }; struct SubscriberInfo { XNDDSSubscriberPtr subscriber; XNDDSDataReaderPtr dataReader; }; struct TopicInfo { XNDDSTopicPtr topic; XNDDSPublisherMap publishers_; XNDDSSubscriberMap subscribers_; }; using XNDDSTopicMap = std::unordered_map; template using XNDDSCallBack = std::function; template class DataReaderListenerImpl : public XN_DDS::DataReaderListener { public: DataReaderListenerImpl(XNDDSCallBack callback) : callback_(callback) {} void on_data_available(XNDDSDataReaderPtr reader) override { XN_DDS::SampleInfo info; if (reader->take_next_sample(&data_, &info) == XN_DDS::RETCODE_OK && info.valid_data) { callback_(data_); } } private: T data_; XNDDSCallBack callback_; }; } // namespace XNSim