28 : callback_(callback) {}
35 std::lock_guard<std::mutex> lock(mutex_);
38 auto channel_id =
common::Hash(sub->getAttributes().topic.getTopicName());
39 eprosima::fastrtps::SampleInfo_t m_info;
42 RETURN_IF(!sub->takeNextData(
reinterpret_cast<void*
>(&m), &m_info));
43 RETURN_IF(m_info.sampleKind != eprosima::fastrtps::ALIVE);
47 reinterpret_cast<char*
>(&m_info.related_sample_identity.writer_guid());
57 ((int64_t)m_info.related_sample_identity.sequence_number().high) << 32 |
58 m_info.related_sample_identity.sequence_number().low;
62 std::shared_ptr<std::string> msg_str =
63 std::make_shared<std::string>(m.
data());
66 uint64_t base_time = recv_time & 0xfffffff0000000;
68 uint64_t send_time = base_time | send_time_low;
69 int32_t msg_seq_num = m.
seq();
75 callback_(channel_id, msg_str, msg_info_);
79 eprosima::fastrtps::Subscriber* sub,
80 eprosima::fastrtps::MatchingInfo& info) {
uint64_t ToNanosecond() const
convert time to nanosecond.
static Time Now()
get the current time.
void set_data(const char *data)
void set_msg_seq_num(int32_t msg_seq_num)
void set_seq_num(uint64_t seq_num)
void set_spare_id(const Identity &spare_id)
void set_send_time(uint64_t send_time)
void set_sender_id(const Identity &sender_id)
std::function< void(uint64_t channel_id, const std::shared_ptr< std::string > &msg_str, const MessageInfo &msg_info)> NewMsgCallback
SubListener(const NewMsgCallback &callback)
void onSubscriptionMatched(eprosima::fastrtps::Subscriber *sub, eprosima::fastrtps::MatchingInfo &info)
void onNewDataMessage(eprosima::fastrtps::Subscriber *sub)
This class represents the structure UnderlayMessage defined by the user in the IDL file.
void timestamp(int32_t _timestamp)
This function sets a value in member timestamp
void seq(int32_t _seq)
This function sets a value in member seq
void data(const std::string &_data)
This function copies the value in member data
#define RETURN_IF_NULL(ptr)
#define RETURN_IF(condition)
std::size_t Hash(const std::string &key)
constexpr uint8_t ID_SIZE