17 #ifndef CYBER_NODE_NODE_H_ 18 #define CYBER_NODE_NODE_H_ 31 template <
typename M0,
typename M1,
typename M2,
typename M3>
46 template <
typename M0,
typename M1,
typename M2,
typename M3>
49 friend bool Init(
const char*);
50 friend std::unique_ptr<Node>
CreateNode(
const std::string&,
58 const std::string&
Name()
const;
68 template <
typename MessageT>
69 auto CreateWriter(
const proto::RoleAttributes& role_attr)
70 -> std::shared_ptr<Writer<MessageT>>;
79 template <
typename MessageT>
81 -> std::shared_ptr<Writer<MessageT>>;
93 template <
typename MessageT>
96 -> std::shared_ptr<cyber::Reader<MessageT>>;
107 template <
typename MessageT>
110 -> std::shared_ptr<cyber::Reader<MessageT>>;
121 template <
typename MessageT>
122 auto CreateReader(
const proto::RoleAttributes& role_attr,
124 -> std::shared_ptr<cyber::Reader<MessageT>>;
135 template <
typename Request,
typename Response>
139 -> std::shared_ptr<Service<Request, Response>>;
149 template <
typename Request,
typename Response>
151 -> std::shared_ptr<Client<Request, Response>>;
170 template <
typename MessageT>
171 auto GetReader(
const std::string& channel_name)
172 -> std::shared_ptr<Reader<MessageT>>;
175 explicit Node(
const std::string& node_name,
176 const std::string& name_space =
"");
178 std::string node_name_;
179 std::string name_space_;
181 std::mutex readers_mutex_;
182 std::map<std::string, std::shared_ptr<ReaderBase>> readers_;
184 std::unique_ptr<NodeChannelImpl> node_channel_impl_ =
nullptr;
185 std::unique_ptr<NodeServiceImpl> node_service_impl_ =
nullptr;
188 template <
typename MessageT>
190 -> std::shared_ptr<Writer<MessageT>> {
191 return node_channel_impl_->template CreateWriter<MessageT>(role_attr);
194 template <
typename MessageT>
196 -> std::shared_ptr<Writer<MessageT>> {
197 return node_channel_impl_->template CreateWriter<MessageT>(channel_name);
200 template <
typename MessageT>
203 -> std::shared_ptr<Reader<MessageT>> {
204 std::lock_guard<std::mutex> lg(readers_mutex_);
205 if (readers_.find(role_attr.channel_name()) != readers_.end()) {
206 AWARN <<
"Failed to create reader: reader with the same channel already " 210 auto reader = node_channel_impl_->template CreateReader<MessageT>(
211 role_attr, reader_func);
212 if (reader !=
nullptr) {
213 readers_.emplace(std::make_pair(role_attr.channel_name(), reader));
218 template <
typename MessageT>
221 -> std::shared_ptr<cyber::Reader<MessageT>> {
222 std::lock_guard<std::mutex> lg(readers_mutex_);
223 if (readers_.find(config.channel_name) != readers_.end()) {
224 AWARN <<
"Failed to create reader: reader with the same channel already " 229 node_channel_impl_->template CreateReader<MessageT>(config, reader_func);
230 if (reader !=
nullptr) {
231 readers_.emplace(std::make_pair(config.channel_name, reader));
236 template <
typename MessageT>
239 -> std::shared_ptr<Reader<MessageT>> {
240 std::lock_guard<std::mutex> lg(readers_mutex_);
241 if (readers_.find(channel_name) != readers_.end()) {
242 AWARN <<
"Failed to create reader: reader with the same channel already " 246 auto reader = node_channel_impl_->template CreateReader<MessageT>(
247 channel_name, reader_func);
248 if (reader !=
nullptr) {
249 readers_.emplace(std::make_pair(channel_name, reader));
254 template <
typename Request,
typename Response>
256 const std::string& service_name,
258 service_callback) -> std::shared_ptr<Service<Request, Response>> {
259 return node_service_impl_->template CreateService<Request, Response>(
260 service_name, service_callback);
263 template <
typename Request,
typename Response>
265 -> std::shared_ptr<Client<Request, Response>> {
266 return node_service_impl_->template CreateClient<Request, Response>(
270 template <
typename MessageT>
272 -> std::shared_ptr<Reader<MessageT>> {
273 std::lock_guard<std::mutex> lg(readers_mutex_);
274 auto it = readers_.find(name);
275 if (it != readers_.end()) {
284 #endif // CYBER_NODE_NODE_H_ void ClearData()
clear all readers' data
TimerComponent is a timer component. Your component can inherit from Component, and implement Init() ...
Definition: timer_component.h:35
Definition: node_channel_impl.h:37
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Reader subscribes a channel, it has two main functions:
Definition: reader.h:68
auto CreateReader(const std::string &channel_name, const CallbackFunc< MessageT > &reader_func=nullptr) -> std::shared_ptr< cyber::Reader< MessageT >>
Create a Reader with specific message type with channel name qos and other configs used will be defau...
Definition: node.h:237
friend std::unique_ptr< Node > CreateNode(const std::string &, const std::string &)
std::function< void(const std::shared_ptr< Request > &, std::shared_ptr< Response > &)> ServiceCallback
Definition: service.h:45
Node is the fundamental building block of Cyber RT. every module contains and communicates through th...
Definition: node.h:44
void Observe()
Observe all readers' data.
std::function< void(const std::shared_ptr< M0 > &)> CallbackFunc
Definition: reader.h:45
auto GetReader(const std::string &channel_name) -> std::shared_ptr< Reader< MessageT >>
Get the Reader object that subscribe channel_name
Definition: node.h:271
auto CreateWriter(const proto::RoleAttributes &role_attr) -> std::shared_ptr< Writer< MessageT >>
Create a Writer with specific message type.
Definition: node.h:189
friend bool Init(const char *)
#define AWARN
Definition: log.h:43
auto CreateService(const std::string &service_name, const typename Service< Request, Response >::ServiceCallback &service_callback) -> std::shared_ptr< Service< Request, Response >>
Create a Service object with specific service_name
Definition: node.h:255
const std::string & Name() const
Get node's name.
The Component can process up to four channels of messages. The message type is specified when the com...
Definition: component.h:58
auto CreateClient(const std::string &service_name) -> std::shared_ptr< Client< Request, Response >>
Create a Client object to request Service with service_name
Definition: node.h:264