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

#include <listener_handler.h>

类 apollo::cyber::transport::ListenerHandler< MessageT > 继承关系图:
apollo::cyber::transport::ListenerHandler< MessageT > 的协作图:

Public 类型

using Message = std::shared_ptr< MessageT >
 
using MessageSignal = base::Signal< const Message &, const MessageInfo & >
 
using Listener = std::function< void(const Message &, const MessageInfo &)>
 
using MessageConnection = base::Connection< const Message &, const MessageInfo & >
 
using ConnectionMap = std::unordered_map< uint64_t, MessageConnection >
 

Public 成员函数

 ListenerHandler ()
 
virtual ~ListenerHandler ()
 
void Connect (uint64_t self_id, const Listener &listener)
 
void Connect (uint64_t self_id, uint64_t oppo_id, const Listener &listener)
 
void Disconnect (uint64_t self_id) override
 
void Disconnect (uint64_t self_id, uint64_t oppo_id) override
 
void Run (const Message &msg, const MessageInfo &msg_info)
 
void RunFromString (const std::string &str, const MessageInfo &msg_info) override
 
 ListenerHandler ()
 
- Public 成员函数 继承自 apollo::cyber::transport::ListenerHandlerBase
 ListenerHandlerBase ()
 
virtual ~ListenerHandlerBase ()
 
bool IsRawMessage () const
 

额外继承的成员函数

- Protected 属性 继承自 apollo::cyber::transport::ListenerHandlerBase
bool is_raw_message_ = false
 

详细描述

template<typename MessageT>
class apollo::cyber::transport::ListenerHandler< MessageT >

在文件 listener_handler.h60 行定义.

成员类型定义说明

◆ ConnectionMap

template<typename MessageT >
using apollo::cyber::transport::ListenerHandler< MessageT >::ConnectionMap = std::unordered_map<uint64_t, MessageConnection>

在文件 listener_handler.h68 行定义.

◆ Listener

template<typename MessageT >
using apollo::cyber::transport::ListenerHandler< MessageT >::Listener = std::function<void(const Message&, const MessageInfo&)>

在文件 listener_handler.h65 行定义.

◆ Message

template<typename MessageT >
using apollo::cyber::transport::ListenerHandler< MessageT >::Message = std::shared_ptr<MessageT>

在文件 listener_handler.h62 行定义.

◆ MessageConnection

template<typename MessageT >
using apollo::cyber::transport::ListenerHandler< MessageT >::MessageConnection = base::Connection<const Message&, const MessageInfo&>

在文件 listener_handler.h66 行定义.

◆ MessageSignal

template<typename MessageT >
using apollo::cyber::transport::ListenerHandler< MessageT >::MessageSignal = base::Signal<const Message&, const MessageInfo&>

在文件 listener_handler.h63 行定义.

构造及析构函数说明

◆ ListenerHandler() [1/2]

template<typename MessageT >
apollo::cyber::transport::ListenerHandler< MessageT >::ListenerHandler ( )
inline

在文件 listener_handler.h70 行定义.

70{}

◆ ~ListenerHandler()

template<typename MessageT >
virtual apollo::cyber::transport::ListenerHandler< MessageT >::~ListenerHandler ( )
inlinevirtual

在文件 listener_handler.h71 行定义.

71{}

◆ ListenerHandler() [2/2]

成员函数说明

◆ Connect() [1/2]

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::Connect ( uint64_t  self_id,
const Listener listener 
)

在文件 listener_handler.h104 行定义.

105 {
106 auto connection = signal_.Connect(listener);
107 if (!connection.IsConnected()) {
108 return;
109 }
110
111 WriteLockGuard<AtomicRWLock> lock(rw_lock_);
112 signal_conns_[self_id] = connection;
113}
ConnectionType Connect(const Callback &cb)
Definition signal.h:65

◆ Connect() [2/2]

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::Connect ( uint64_t  self_id,
uint64_t  oppo_id,
const Listener listener 
)

在文件 listener_handler.h116 行定义.

117 {
118 WriteLockGuard<AtomicRWLock> lock(rw_lock_);
119 if (signals_.find(oppo_id) == signals_.end()) {
120 signals_[oppo_id] = std::make_shared<MessageSignal>();
121 }
122
123 auto connection = signals_[oppo_id]->Connect(listener);
124 if (!connection.IsConnected()) {
125 AWARN << oppo_id << " " << self_id << " connect failed!";
126 return;
127 }
128
129 if (signals_conns_.find(oppo_id) == signals_conns_.end()) {
130 signals_conns_[oppo_id] = ConnectionMap();
131 }
132
133 signals_conns_[oppo_id][self_id] = connection;
134}
std::unordered_map< uint64_t, MessageConnection > ConnectionMap
#define AWARN
Definition log.h:43

◆ Disconnect() [1/2]

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::Disconnect ( uint64_t  self_id)
overridevirtual

实现了 apollo::cyber::transport::ListenerHandlerBase.

在文件 listener_handler.h137 行定义.

137 {
138 WriteLockGuard<AtomicRWLock> lock(rw_lock_);
139 if (signal_conns_.find(self_id) == signal_conns_.end()) {
140 return;
141 }
142
143 signal_conns_[self_id].Disconnect();
144 signal_conns_.erase(self_id);
145}

◆ Disconnect() [2/2]

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::Disconnect ( uint64_t  self_id,
uint64_t  oppo_id 
)
overridevirtual

实现了 apollo::cyber::transport::ListenerHandlerBase.

在文件 listener_handler.h148 行定义.

148 {
149 WriteLockGuard<AtomicRWLock> lock(rw_lock_);
150 if (signals_conns_.find(oppo_id) == signals_conns_.end()) {
151 return;
152 }
153
154 if (signals_conns_[oppo_id].find(self_id) == signals_conns_[oppo_id].end()) {
155 return;
156 }
157
158 signals_conns_[oppo_id][self_id].Disconnect();
159 signals_conns_[oppo_id].erase(self_id);
160}

◆ Run()

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::Run ( const Message msg,
const MessageInfo msg_info 
)

在文件 listener_handler.h163 行定义.

164 {
165 signal_(msg, msg_info);
166 uint64_t oppo_id = msg_info.sender_id().HashValue();
167 ReadLockGuard<AtomicRWLock> lock(rw_lock_);
168 if (signals_.find(oppo_id) == signals_.end()) {
169 return;
170 }
171
172 (*signals_[oppo_id])(msg, msg_info);
173}

◆ RunFromString()

template<typename MessageT >
void apollo::cyber::transport::ListenerHandler< MessageT >::RunFromString ( const std::string &  str,
const MessageInfo msg_info 
)
overridevirtual

实现了 apollo::cyber::transport::ListenerHandlerBase.

在文件 listener_handler.h176 行定义.

177 {
178 auto msg = std::make_shared<MessageT>();
179 if (message::ParseFromHC(str.data(), static_cast<int>(str.size()),
180 msg.get())) {
181 Run(msg, msg_info);
182 } else {
183 AWARN << "Failed to parse message. Content: " << str;
184 }
185}
void Run(const Message &msg, const MessageInfo &msg_info)
std::enable_if< HasParseFromArray< T >::value, bool >::type ParseFromHC(const void *data, int size, T *message)

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