27 lines
789 B
C
27 lines
789 B
C
|
#pragma once
|
||
|
|
||
|
#include <fastdds/dds/subscriber/DataReaderListener.hpp>
|
||
|
#include <fastdds/dds/subscriber/DataReader.hpp>
|
||
|
#include <fastdds/dds/subscriber/qos/DataReaderQos.hpp>
|
||
|
#include <fastdds/dds/subscriber/SampleInfo.hpp>
|
||
|
|
||
|
template <typename T>
|
||
|
class DataReaderListenerImpl : public eprosima::fastdds::dds::DataReaderListener
|
||
|
{
|
||
|
public:
|
||
|
DataReaderListenerImpl(std::function<void(const T &)> callback) : callback_(callback) {}
|
||
|
|
||
|
void on_data_available(eprosima::fastdds::dds::DataReader *reader) override
|
||
|
{
|
||
|
eprosima::fastdds::dds::SampleInfo info;
|
||
|
if (reader->take_next_sample(&data_, &info) == eprosima::fastdds::dds::RETCODE_OK
|
||
|
&& info.valid_data) {
|
||
|
callback_(data_);
|
||
|
//qInfo() << "Data available";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
T data_;
|
||
|
std::function<void(const T &)> callback_;
|
||
|
};
|