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

#include <intra_dispatcher.h>

apollo::cyber::transport::ChannelChain 的协作图:

Public 成员函数

template<typename MessageT >
bool AddListener (uint64_t self_id, uint64_t channel_id, const std::string &message_type, const MessageListener< MessageT > &listener)
 
template<typename MessageT >
bool AddListener (uint64_t self_id, uint64_t oppo_id, uint64_t channel_id, const std::string &message_type, const MessageListener< MessageT > &listener)
 
template<typename MessageT >
void RemoveListener (uint64_t self_id, uint64_t channel_id, const std::string &message_type)
 
template<typename MessageT >
void RemoveListener (uint64_t self_id, uint64_t oppo_id, uint64_t channel_id, const std::string &message_type)
 
template<typename MessageT >
void Run (uint64_t self_id, uint64_t channel_id, const std::string &message_type, const std::shared_ptr< MessageT > &message, const MessageInfo &message_info)
 
template<typename MessageT >
void Run (uint64_t self_id, uint64_t oppo_id, uint64_t channel_id, const std::string &message_type, const std::shared_ptr< MessageT > &message, const MessageInfo &message_info)
 

详细描述

在文件 intra_dispatcher.h51 行定义.

成员函数说明

◆ AddListener() [1/2]

template<typename MessageT >
bool apollo::cyber::transport::ChannelChain::AddListener ( uint64_t  self_id,
uint64_t  channel_id,
const std::string &  message_type,
const MessageListener< MessageT > &  listener 
)
inline

在文件 intra_dispatcher.h57 行定义.

59 {
60 WriteLockGuard<base::AtomicRWLock> lg(rw_lock_);
61 auto ret = GetHandler<MessageT>(channel_id, message_type, &handlers_);
62 auto handler = ret.first;
63 if (handler == nullptr) {
64 AERROR << "get handler failed. channel: "
65 << GlobalData::GetChannelById(channel_id)
66 << ", message type: " << message::GetMessageName<MessageT>();
67 return ret.second;
68 }
69 handler->Connect(self_id, listener);
70 return ret.second;
71 }
static std::string GetChannelById(uint64_t id)
#define AERROR
Definition log.h:44

◆ AddListener() [2/2]

template<typename MessageT >
bool apollo::cyber::transport::ChannelChain::AddListener ( uint64_t  self_id,
uint64_t  oppo_id,
uint64_t  channel_id,
const std::string &  message_type,
const MessageListener< MessageT > &  listener 
)
inline

在文件 intra_dispatcher.h74 行定义.

76 {
77 WriteLockGuard<base::AtomicRWLock> lg(oppo_rw_lock_);
78 if (oppo_handlers_.find(oppo_id) == oppo_handlers_.end()) {
79 oppo_handlers_[oppo_id] = BaseHandlersType();
80 }
81 BaseHandlersType& handlers = oppo_handlers_[oppo_id];
82 auto ret = GetHandler<MessageT>(channel_id, message_type, &handlers);
83 auto handler = ret.first;
84 if (handler == nullptr) {
85 AERROR << "get handler failed. channel: "
86 << GlobalData::GetChannelById(channel_id)
87 << ", message type: " << message_type;
88 return ret.second;
89 }
90 handler->Connect(self_id, oppo_id, listener);
91 return ret.second;
92 }

◆ RemoveListener() [1/2]

template<typename MessageT >
void apollo::cyber::transport::ChannelChain::RemoveListener ( uint64_t  self_id,
uint64_t  channel_id,
const std::string &  message_type 
)
inline

在文件 intra_dispatcher.h95 行定义.

96 {
97 WriteLockGuard<base::AtomicRWLock> lg(rw_lock_);
98 auto handler = RemoveHandler(channel_id, message_type, &handlers_);
99 if (handler) {
100 handler->Disconnect(self_id);
101 }
102 }

◆ RemoveListener() [2/2]

template<typename MessageT >
void apollo::cyber::transport::ChannelChain::RemoveListener ( uint64_t  self_id,
uint64_t  oppo_id,
uint64_t  channel_id,
const std::string &  message_type 
)
inline

在文件 intra_dispatcher.h105 行定义.

106 {
107 WriteLockGuard<base::AtomicRWLock> lg(oppo_rw_lock_);
108 if (oppo_handlers_.find(oppo_id) == oppo_handlers_.end()) {
109 return;
110 }
111 BaseHandlersType& handlers = oppo_handlers_[oppo_id];
112 auto handler = RemoveHandler(channel_id, message_type, &handlers);
113 if (oppo_handlers_[oppo_id].empty()) {
114 oppo_handlers_.erase(oppo_id);
115 }
116 if (handler) {
117 handler->Disconnect(self_id, oppo_id);
118 }
119 }

◆ Run() [1/2]

template<typename MessageT >
void apollo::cyber::transport::ChannelChain::Run ( uint64_t  self_id,
uint64_t  channel_id,
const std::string &  message_type,
const std::shared_ptr< MessageT > &  message,
const MessageInfo message_info 
)
inline

在文件 intra_dispatcher.h122 行定义.

125 {
126 ReadLockGuard<base::AtomicRWLock> lg(rw_lock_);
127 Run(channel_id, message_type, handlers_, message, message_info);
128 }
void Run(uint64_t self_id, uint64_t channel_id, const std::string &message_type, const std::shared_ptr< MessageT > &message, const MessageInfo &message_info)

◆ Run() [2/2]

template<typename MessageT >
void apollo::cyber::transport::ChannelChain::Run ( uint64_t  self_id,
uint64_t  oppo_id,
uint64_t  channel_id,
const std::string &  message_type,
const std::shared_ptr< MessageT > &  message,
const MessageInfo message_info 
)
inline

在文件 intra_dispatcher.h131 行定义.

134 {
135 ReadLockGuard<base::AtomicRWLock> lg(oppo_rw_lock_);
136 if (oppo_handlers_.find(oppo_id) == oppo_handlers_.end()) {
137 return;
138 }
139 BaseHandlersType& handlers = oppo_handlers_[oppo_id];
140 Run(channel_id, message_type, handlers, message, message_info);
141 }

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