Apollo 10.0
自动驾驶开放平台
apollo::cyber::ReceiverManager< MessageT > 模板类 参考

One Channel is related to one Receiver. 更多...

#include <reader_base.h>

apollo::cyber::ReceiverManager< MessageT > 的协作图:

Public 成员函数

 ~ReceiverManager ()
 
auto GetReceiver (const proto::RoleAttributes &role_attr) -> typename std::shared_ptr< transport::Receiver< MessageT > >
 Get the Receiver object
 

详细描述

template<typename MessageT>
class apollo::cyber::ReceiverManager< MessageT >

One Channel is related to one Receiver.

ReceiverManager is in charge of attaching one Receiver to its responding Channel. We pass a DataDispatcher's callback func to this Receiver so when a message is received, it will be push to the ChannelBuffer, and DataVisitor will Fetch data and pass to Reader's callback func

模板参数
MessageTMessage Type.

在文件 reader_base.h168 行定义.

构造及析构函数说明

◆ ~ReceiverManager()

template<typename MessageT >
apollo::cyber::ReceiverManager< MessageT >::~ReceiverManager ( )
inline

在文件 reader_base.h170 行定义.

170{ receiver_map_.clear(); }

成员函数说明

◆ GetReceiver()

template<typename MessageT >
auto apollo::cyber::ReceiverManager< MessageT >::GetReceiver ( const proto::RoleAttributes role_attr) -> typename std::shared_ptr<transport::Receiver<MessageT>>

Get the Receiver object

参数
role_attrthe attribute that the Receiver has
返回
std::shared_ptr<transport::Receiver<MessageT>> result Receiver

在文件 reader_base.h199 行定义.

201 {
202 std::lock_guard<std::mutex> lock(receiver_map_mutex_);
203 // because multi reader for one channel will write datacache multi times,
204 // so reader for datacache we use map to keep one instance for per channel
205 const std::string& channel_name = role_attr.channel_name();
206 if (receiver_map_.count(channel_name) == 0) {
207 receiver_map_[channel_name] =
208 transport::Transport::Instance()->CreateReceiver<MessageT>(
209 role_attr, [](const std::shared_ptr<MessageT>& msg,
210 const transport::MessageInfo& msg_info,
211 const proto::RoleAttributes& reader_attr) {
212 (void)msg_info;
213 (void)reader_attr;
214 PerfEventCache::Instance()->AddTransportEvent(
215 TransPerf::DISPATCH, reader_attr.channel_id(),
216 msg_info.seq_num());
217 data::DataDispatcher<MessageT>::Instance()->Dispatch(
218 reader_attr.channel_id(), msg);
219 PerfEventCache::Instance()->AddTransportEvent(
220 TransPerf::NOTIFY, reader_attr.channel_id(),
221 msg_info.seq_num());
222 });
223 }
224 return receiver_map_[channel_name];
225}

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