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

#include <dispatcher.h>

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

Public 成员函数

 Dispatcher ()
 
virtual ~Dispatcher ()
 
virtual void Shutdown ()
 
template<typename MessageT >
void AddListener (const RoleAttributes &self_attr, const MessageListener< MessageT > &listener)
 
template<typename MessageT >
void AddListener (const RoleAttributes &self_attr, const RoleAttributes &opposite_attr, const MessageListener< MessageT > &listener)
 
template<typename MessageT >
void RemoveListener (const RoleAttributes &self_attr)
 
template<typename MessageT >
void RemoveListener (const RoleAttributes &self_attr, const RoleAttributes &opposite_attr)
 
bool HasChannel (uint64_t channel_id)
 

Protected 属性

std::atomic< bool > is_shutdown_
 
AtomicHashMap< uint64_t, ListenerHandlerBasePtrmsg_listeners_
 
base::AtomicRWLock rw_lock_
 

详细描述

在文件 dispatcher.h55 行定义.

构造及析构函数说明

◆ Dispatcher()

apollo::cyber::transport::Dispatcher::Dispatcher ( )

在文件 dispatcher.cc23 行定义.

23: is_shutdown_(false) {}

◆ ~Dispatcher()

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

在文件 dispatcher.cc25 行定义.

成员函数说明

◆ AddListener() [1/2]

template<typename MessageT >
void apollo::cyber::transport::Dispatcher::AddListener ( const RoleAttributes self_attr,
const MessageListener< MessageT > &  listener 
)

在文件 dispatcher.h88 行定义.

89 {
90 if (is_shutdown_.load()) {
91 return;
92 }
93 uint64_t channel_id = self_attr.channel_id();
94
95 std::shared_ptr<ListenerHandler<MessageT>> handler;
96 ListenerHandlerBasePtr* handler_base = nullptr;
97 if (msg_listeners_.Get(channel_id, &handler_base)) {
98 handler =
99 std::dynamic_pointer_cast<ListenerHandler<MessageT>>(*handler_base);
100 if (handler == nullptr) {
101 AERROR << "please ensure that readers with the same channel["
102 << self_attr.channel_name()
103 << "] in the same process have the same message type";
104 return;
105 }
106 } else {
107 ADEBUG << "new reader for channel:"
108 << GlobalData::GetChannelById(channel_id);
109 handler.reset(new ListenerHandler<MessageT>());
110 msg_listeners_.Set(channel_id, handler);
111 }
112 handler->Connect(self_attr.id(), listener);
113}
static std::string GetChannelById(uint64_t id)
AtomicHashMap< uint64_t, ListenerHandlerBasePtr > msg_listeners_
Definition dispatcher.h:83
#define ADEBUG
Definition log.h:41
#define AERROR
Definition log.h:44
std::shared_ptr< ListenerHandlerBase > ListenerHandlerBasePtr

◆ AddListener() [2/2]

template<typename MessageT >
void apollo::cyber::transport::Dispatcher::AddListener ( const RoleAttributes self_attr,
const RoleAttributes opposite_attr,
const MessageListener< MessageT > &  listener 
)

在文件 dispatcher.h116 行定义.

118 {
119 if (is_shutdown_.load()) {
120 return;
121 }
122 uint64_t channel_id = self_attr.channel_id();
123
124 std::shared_ptr<ListenerHandler<MessageT>> handler;
125 ListenerHandlerBasePtr* handler_base = nullptr;
126 if (msg_listeners_.Get(channel_id, &handler_base)) {
127 handler =
128 std::dynamic_pointer_cast<ListenerHandler<MessageT>>(*handler_base);
129 if (handler == nullptr) {
130 AERROR << "please ensure that readers with the same channel["
131 << self_attr.channel_name()
132 << "] in the same process have the same message type";
133 return;
134 }
135 } else {
136 ADEBUG << "new reader for channel:"
137 << GlobalData::GetChannelById(channel_id);
138 handler.reset(new ListenerHandler<MessageT>());
139 msg_listeners_.Set(channel_id, handler);
140 }
141 handler->Connect(self_attr.id(), opposite_attr.id(), listener);
142}

◆ HasChannel()

bool apollo::cyber::transport::Dispatcher::HasChannel ( uint64_t  channel_id)

在文件 dispatcher.cc32 行定义.

32 {
33 return msg_listeners_.Has(channel_id);
34}

◆ RemoveListener() [1/2]

template<typename MessageT >
void apollo::cyber::transport::Dispatcher::RemoveListener ( const RoleAttributes self_attr)

在文件 dispatcher.h145 行定义.

145 {
146 if (is_shutdown_.load()) {
147 return;
148 }
149 uint64_t channel_id = self_attr.channel_id();
150
151 ListenerHandlerBasePtr* handler_base = nullptr;
152 if (msg_listeners_.Get(channel_id, &handler_base)) {
153 (*handler_base)->Disconnect(self_attr.id());
154 }
155}

◆ RemoveListener() [2/2]

template<typename MessageT >
void apollo::cyber::transport::Dispatcher::RemoveListener ( const RoleAttributes self_attr,
const RoleAttributes opposite_attr 
)

在文件 dispatcher.h158 行定义.

159 {
160 if (is_shutdown_.load()) {
161 return;
162 }
163 uint64_t channel_id = self_attr.channel_id();
164
165 ListenerHandlerBasePtr* handler_base = nullptr;
166 if (msg_listeners_.Get(channel_id, &handler_base)) {
167 (*handler_base)->Disconnect(self_attr.id(), opposite_attr.id());
168 }
169}

◆ Shutdown()

void apollo::cyber::transport::Dispatcher::Shutdown ( )
virtual

apollo::cyber::transport::RtpsDispatcher , 以及 apollo::cyber::transport::ShmDispatcher 重载.

在文件 dispatcher.cc27 行定义.

27 {
28 is_shutdown_.store(true);
29 ADEBUG << "Shutdown";
30}

类成员变量说明

◆ is_shutdown_

std::atomic<bool> apollo::cyber::transport::Dispatcher::is_shutdown_
protected

在文件 dispatcher.h81 行定义.

◆ msg_listeners_

AtomicHashMap<uint64_t, ListenerHandlerBasePtr> apollo::cyber::transport::Dispatcher::msg_listeners_
protected

在文件 dispatcher.h83 行定义.

◆ rw_lock_

base::AtomicRWLock apollo::cyber::transport::Dispatcher::rw_lock_
protected

在文件 dispatcher.h84 行定义.


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