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

#include <shm_transmitter.h>

类 apollo::cyber::transport::ShmTransmitter< M > 继承关系图:
apollo::cyber::transport::ShmTransmitter< M > 的协作图:

Public 类型

using MessagePtr = std::shared_ptr< M >
 
- Public 类型 继承自 apollo::cyber::transport::Transmitter< M >
using MessagePtr = std::shared_ptr< M >
 

Public 成员函数

 ShmTransmitter (const RoleAttributes &attr)
 
virtual ~ShmTransmitter ()
 
void Enable () override
 
void Disable () override
 
void Enable (const RoleAttributes &opposite_attr)
 
void Disable (const RoleAttributes &opposite_attr)
 
bool Transmit (const MessagePtr &msg, const MessageInfo &msg_info) override
 
bool AcquireMessage (std::shared_ptr< M > &msg)
 
- Public 成员函数 继承自 apollo::cyber::transport::Transmitter< M >
 Transmitter (const RoleAttributes &attr)
 
virtual ~Transmitter ()
 
virtual bool Transmit (const MessagePtr &msg)
 
uint64_t NextSeqNum ()
 
uint64_t seq_num () const
 
- Public 成员函数 继承自 apollo::cyber::transport::Endpoint
 Endpoint (const RoleAttributes &attr)
 
virtual ~Endpoint ()
 
const Identityid () const
 
const RoleAttributesattributes () const
 

额外继承的成员函数

- Protected 属性 继承自 apollo::cyber::transport::Transmitter< M >
MessageInfo msg_info_
 
std::shared_ptr<::bvar::Adder< int > > seq_num_
 
- Protected 属性 继承自 apollo::cyber::transport::Endpoint
bool enabled_
 
Identity id_
 
RoleAttributes attr_
 

详细描述

template<typename M>
class apollo::cyber::transport::ShmTransmitter< M >

在文件 shm_transmitter.h46 行定义.

成员类型定义说明

◆ MessagePtr

template<typename M >
using apollo::cyber::transport::ShmTransmitter< M >::MessagePtr = std::shared_ptr<M>

在文件 shm_transmitter.h48 行定义.

构造及析构函数说明

◆ ShmTransmitter()

template<typename M >
apollo::cyber::transport::ShmTransmitter< M >::ShmTransmitter ( const RoleAttributes attr)
explicit

在文件 shm_transmitter.h96 行定义.

97 : Transmitter<M>(attr),
98 segment_(nullptr),
99 channel_id_(attr.channel_id()),
100 notifier_(nullptr),
101 serialized_receiver_count_(0),
102 arena_receiver_count_(0) {
103 host_id_ = common::Hash(attr.host_ip());
104 arena_transmit_ = common::GlobalData::Instance()->IsChannelEnableArenaShm(
105 this->attr_.channel_id()) &&
106 !type_check<M, message::RawMessage>::value &&
107 !type_check<M, message::PyMessageWrap>::value;
108}
std::size_t Hash(const std::string &key)
Definition util.h:27

◆ ~ShmTransmitter()

template<typename M >
apollo::cyber::transport::ShmTransmitter< M >::~ShmTransmitter ( )
virtual

在文件 shm_transmitter.h111 行定义.

111 {
112 Disable();
113}

成员函数说明

◆ AcquireMessage()

template<typename M >
bool apollo::cyber::transport::ShmTransmitter< M >::AcquireMessage ( std::shared_ptr< M > &  msg)
virtual

实现了 apollo::cyber::transport::Transmitter< M >.

在文件 shm_transmitter.h76 行定义.

76 {
77 if (this->enabled_) {
78 auto msg_o = msg.get();
79 auto arena_manager = ProtobufArenaManager::Instance();
80 if (!arena_manager->Enable() ||
81 !arena_manager->EnableSegment(this->attr_.channel_id())) {
82 ADEBUG << "arena manager enable failed.";
83 return false;
84 }
85 arena_manager->AcquireArenaMessage(channel_id_, msg);
86 if (msg.get() != msg_o) {
87 return true;
88 } else {
89 return false;
90 }
91 }
92 return false;
93}
#define ADEBUG
Definition log.h:41

◆ Disable() [1/2]

template<typename M >
void apollo::cyber::transport::ShmTransmitter< M >::Disable ( )
overridevirtual

实现了 apollo::cyber::transport::Transmitter< M >.

在文件 shm_transmitter.h186 行定义.

186 {
187 if (this->enabled_) {
188 segment_ = nullptr;
189 notifier_ = nullptr;
190 this->enabled_ = false;
191 }
192}

◆ Disable() [2/2]

template<typename M >
void apollo::cyber::transport::ShmTransmitter< M >::Disable ( const RoleAttributes opposite_attr)
virtual

重载 apollo::cyber::transport::Transmitter< M > .

在文件 shm_transmitter.h135 行定义.

135 {
136 if (this->enabled_) {
137 if (arena_transmit_) {
138 if (opposite_attr.message_type() ==
139 message::MessageType<message::RawMessage>() ||
140 opposite_attr.message_type() ==
141 message::MessageType<message::PyMessageWrap>()) {
142 serialized_receiver_count_.fetch_sub(1);
143 } else {
144 arena_receiver_count_.fetch_sub(1);
145 }
146 if (serialized_receiver_count_.load() <= 0 &&
147 arena_receiver_count_.load() <= 0) {
148 this->Disable();
149 }
150 } else {
151 serialized_receiver_count_.fetch_sub(1);
152 if (serialized_receiver_count_.load() <= 0) {
153 this->Disable();
154 }
155 }
156 }
157}

◆ Enable() [1/2]

template<typename M >
void apollo::cyber::transport::ShmTransmitter< M >::Enable ( )
overridevirtual

实现了 apollo::cyber::transport::Transmitter< M >.

在文件 shm_transmitter.h160 行定义.

160 {
161 if (this->enabled_) {
162 return;
163 }
164
165 if (serialized_receiver_count_.load() == 0 &&
166 arena_receiver_count_.load() == 0) {
167 AERROR << "please enable shm transmitter by passing role attr.";
168 return;
169 }
170
171 if (arena_transmit_) {
172 auto arena_manager = ProtobufArenaManager::Instance();
173 if (!arena_manager->Enable() ||
174 !arena_manager->EnableSegment(this->attr_.channel_id())) {
175 AERROR << "arena manager enable failed.";
176 return;
177 }
178 }
179
180 segment_ = SegmentFactory::CreateSegment(channel_id_);
182 this->enabled_ = true;
183}
static SegmentPtr CreateSegment(uint64_t channel_id)
#define AERROR
Definition log.h:44

◆ Enable() [2/2]

template<typename M >
void apollo::cyber::transport::ShmTransmitter< M >::Enable ( const RoleAttributes opposite_attr)
virtual

重载 apollo::cyber::transport::Transmitter< M > .

在文件 shm_transmitter.h116 行定义.

116 {
117 if (arena_transmit_) {
118 if (opposite_attr.message_type() ==
119 message::MessageType<message::RawMessage>() ||
120 opposite_attr.message_type() ==
121 message::MessageType<message::PyMessageWrap>()) {
122 serialized_receiver_count_.fetch_add(1);
123 } else {
124 arena_receiver_count_.fetch_add(1);
125 }
126 } else {
127 serialized_receiver_count_.fetch_add(1);
128 }
129 if (!this->enabled_) {
130 this->Enable();
131 }
132}

◆ Transmit()

template<typename M >
bool apollo::cyber::transport::ShmTransmitter< M >::Transmit ( const MessagePtr msg,
const MessageInfo msg_info 
)
overridevirtual

实现了 apollo::cyber::transport::Transmitter< M >.

在文件 shm_transmitter.h195 行定义.

196 {
197 return Transmit(*msg, msg_info);
198}
bool Transmit(const MessagePtr &msg, const MessageInfo &msg_info) override

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