Apollo 11.0
自动驾驶开放平台
apollo::cyber::transport::SubListener类 参考

#include <sub_listener.h>

类 apollo::cyber::transport::SubListener 继承关系图:
apollo::cyber::transport::SubListener 的协作图:

Public 类型

using NewMsgCallback = std::function< void(uint64_t channel_id, const std::shared_ptr< std::string > &msg_str, const MessageInfo &msg_info)>
 

Public 成员函数

 SubListener (const NewMsgCallback &callback)
 
virtual ~SubListener ()
 
void onNewDataMessage (eprosima::fastrtps::Subscriber *sub)
 
void onSubscriptionMatched (eprosima::fastrtps::Subscriber *sub, eprosima::fastrtps::MatchingInfo &info)
 

详细描述

在文件 sub_listener.h41 行定义.

成员类型定义说明

◆ NewMsgCallback

using apollo::cyber::transport::SubListener::NewMsgCallback = std::function<void( uint64_t channel_id, const std::shared_ptr<std::string>& msg_str, const MessageInfo& msg_info)>

在文件 sub_listener.h43 行定义.

构造及析构函数说明

◆ SubListener()

apollo::cyber::transport::SubListener::SubListener ( const NewMsgCallback callback)
explicit

在文件 sub_listener.cc27 行定义.

28 : callback_(callback) {}

◆ ~SubListener()

apollo::cyber::transport::SubListener::~SubListener ( )
virtual

在文件 sub_listener.cc30 行定义.

30{}

成员函数说明

◆ onNewDataMessage()

void apollo::cyber::transport::SubListener::onNewDataMessage ( eprosima::fastrtps::Subscriber *  sub)

在文件 sub_listener.cc32 行定义.

32 {
33 RETURN_IF_NULL(sub);
34 RETURN_IF_NULL(callback_);
35 std::lock_guard<std::mutex> lock(mutex_);
36
37 // fetch channel name
38 auto channel_id = common::Hash(sub->getAttributes().topic.getTopicName());
39 eprosima::fastrtps::SampleInfo_t m_info;
40 UnderlayMessage m;
41
42 RETURN_IF(!sub->takeNextData(reinterpret_cast<void*>(&m), &m_info));
43 RETURN_IF(m_info.sampleKind != eprosima::fastrtps::ALIVE);
44
45 // fetch MessageInfo
46 char* ptr =
47 reinterpret_cast<char*>(&m_info.related_sample_identity.writer_guid());
48 Identity sender_id(false);
49 sender_id.set_data(ptr);
50 msg_info_.set_sender_id(sender_id);
51
52 Identity spare_id(false);
53 spare_id.set_data(ptr + ID_SIZE);
54 msg_info_.set_spare_id(spare_id);
55
56 uint64_t seq_num =
57 ((int64_t)m_info.related_sample_identity.sequence_number().high) << 32 |
58 m_info.related_sample_identity.sequence_number().low;
59 msg_info_.set_seq_num(seq_num);
60
61 // fetch message string
62 std::shared_ptr<std::string> msg_str =
63 std::make_shared<std::string>(m.data());
64
65 uint64_t recv_time = Time::Now().ToNanosecond();
66 uint64_t base_time = recv_time & 0xfffffff0000000;
67 int32_t send_time_low = m.timestamp();
68 uint64_t send_time = base_time | send_time_low;
69 int32_t msg_seq_num = m.seq();
70
71 msg_info_.set_msg_seq_num(msg_seq_num);
72 msg_info_.set_send_time(send_time);
73
74 // callback
75 callback_(channel_id, msg_str, msg_info_);
76}
uint64_t ToNanosecond() const
convert time to nanosecond.
Definition time.cc:83
static Time Now()
get the current time.
Definition time.cc:57
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)
#define RETURN_IF_NULL(ptr)
Definition log.h:90
#define RETURN_IF(condition)
Definition log.h:106
std::size_t Hash(const std::string &key)
Definition util.h:27
constexpr uint8_t ID_SIZE
Definition identity.h:28

◆ onSubscriptionMatched()

void apollo::cyber::transport::SubListener::onSubscriptionMatched ( eprosima::fastrtps::Subscriber *  sub,
eprosima::fastrtps::MatchingInfo &  info 
)

在文件 sub_listener.cc78 行定义.

80 {
81 (void)sub;
82 (void)info;
83}

该类的文档由以下文件生成: