2424
2525#include  < fastdds/dds/subscriber/Subscriber.hpp> 
2626#include  < fastdds/dds/subscriber/SampleInfo.hpp> 
27+ #include  < fastdds/dds/xtypes/dynamic_types/DynamicData.hpp> 
2728#include  < fastdds/rtps/common/Guid.hpp> 
2829#include  < fastdds_statistics_backend/topic_types/types.hpp> 
2930
@@ -41,8 +42,10 @@ class DataReader
4142
4243    using  StatisticsData = eprosima::fastdds::statistics::Data;
4344    using  MonitorData = eprosima::fastdds::statistics::MonitorServiceStatusData;
45+     using  UserData = eprosima::fastdds::dds::DynamicData::_ref_type;
4446    using  StatisticsSample = std::pair<std::shared_ptr<StatisticsData>, std::shared_ptr<SampleInfo>>;
4547    using  MonitorSample = std::pair<std::shared_ptr<MonitorData>, std::shared_ptr<SampleInfo>>;
48+     using  UserDataSample = std::pair<UserData, std::shared_ptr<SampleInfo>>;
4649
4750    using  StatisticsWriterReaderData = eprosima::fastdds::statistics::WriterReaderData;
4851    using  StatisticsLocator2LocatorData = eprosima::fastdds::statistics::Locator2LocatorData;
@@ -132,6 +135,12 @@ class DataReader
132135            *info = *(monitor_history_.front ().second .get ());
133136            monitor_history_.pop ();
134137        }
138+         else  if  (!user_data_history_.empty ())
139+         {
140+             *static_cast <UserData*>(data) = user_data_history_.front ().first ->clone ();
141+             *info = *(user_data_history_.front ().second .get ());
142+             user_data_history_.pop ();
143+         }
135144        else 
136145        {
137146            return  RETCODE_NO_DATA;
@@ -166,6 +175,13 @@ class DataReader
166175        monitor_history_.push (std::make_pair (data, info));
167176    }
168177
178+     void  add_user_data_sample (
179+             UserData data,
180+             std::shared_ptr<SampleInfo> info)
181+     {
182+         user_data_history_.push (std::make_pair (data, info));
183+     }
184+ 
169185    void  set_guid (
170186            fastdds::rtps::GUID_t guid)
171187    {
@@ -193,6 +209,7 @@ class DataReader
193209    fastdds::rtps::GUID_t guid_;
194210    std::queue<StatisticsSample> history_;
195211    std::queue<MonitorSample> monitor_history_;
212+     std::queue<UserDataSample> user_data_history_;
196213    TopicDescription topic_description_;
197214    std::unique_ptr<Subscriber> subscriber_;
198215};
0 commit comments