Ignition Transport

API Reference

4.0.0
Publisher.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 
18 #ifndef IGN_TRANSPORT_PUBLISHER_HH_
19 #define IGN_TRANSPORT_PUBLISHER_HH_
20 
21 #include <iostream>
22 #include <string>
23 
25 #include "ignition/transport/Export.hh"
26 
27 namespace ignition
28 {
29  namespace transport
30  {
31  class MessagePublisherPrivate;
32 
37  class IGNITION_TRANSPORT_VISIBLE Publisher
38  {
40  public: Publisher() = default;
41 
48  public: Publisher(const std::string &_topic,
49  const std::string &_addr,
50  const std::string &_pUuid,
51  const std::string &_nUuid,
52  const AdvertiseOptions &_opts);
53 
56  public: Publisher(const Publisher &_other);
57 
59  public: virtual ~Publisher() = default;
60 
64  public: std::string Topic() const;
65 
69  public: std::string Addr() const;
70 
74  public: std::string PUuid() const;
75 
79  public: std::string NUuid() const;
80 
84  public: virtual const AdvertiseOptions &Options() const;
85 
89  public: void SetTopic(const std::string &_topic);
90 
94  public: void SetAddr(const std::string &_addr);
95 
99  public: void SetPUuid(const std::string &_pUuid);
100 
104  public: void SetNUuid(const std::string &_nUuid);
105 
109  public: void SetOptions(const AdvertiseOptions &_opts);
110 
116  public: virtual size_t Pack(char *_buffer) const;
117 
120  public: virtual size_t Unpack(const char *_buffer);
121 
124  public: virtual size_t MsgLength() const;
125 
131  public: bool operator==(const Publisher &_pub) const;
132 
138  public: bool operator!=(const Publisher &_pub) const;
139 
143  public: Publisher &operator=(const Publisher &_other);
144 
148  public: friend std::ostream &operator<<(std::ostream &_out,
149  const Publisher &_msg)
150  {
151  _out << "Publisher:" << std::endl
152  << "\tTopic: [" << _msg.Topic() << "]" << std::endl
153  << "\tAddress: " << _msg.Addr() << std::endl
154  << "\tProcess UUID: " << _msg.PUuid() << std::endl
155  << "\tNode UUID: " << _msg.NUuid() << std::endl
156  << _msg.Options();
157 
158  return _out;
159  }
160 
164  protected: size_t PackInternal(char *_buffer) const;
165 
169  protected: size_t UnpackInternal(const char *_buffer);
170 
176  protected: size_t MsgLengthInternal() const;
177 
179  protected: std::string topic;
180 
182  protected: std::string addr;
183 
185  protected: std::string pUuid;
186 
188  protected: std::string nUuid;
189 
192  private: AdvertiseOptions opts;
193  };
194 
198  class IGNITION_TRANSPORT_VISIBLE MessagePublisher : public Publisher
199  {
201  public: MessagePublisher() = default;
202 
211  public: explicit MessagePublisher(const std::string &_topic,
212  const std::string &_addr,
213  const std::string &_ctrl,
214  const std::string &_pUuid,
215  const std::string &_nUuid,
216  const std::string &_msgTypeName,
217  const AdvertiseMessageOptions &_opts);
218 
221  public: MessagePublisher(const MessagePublisher &_other);
222 
224  public: virtual ~MessagePublisher() = default;
225 
226  // Documentation inherited.
227  public: virtual size_t Pack(char *_buffer) const;
228 
229  // Documentation inherited.
230  public: virtual size_t Unpack(const char *_buffer);
231 
232  // Documentation inherited.
233  public: virtual size_t MsgLength() const;
234 
239  public: std::string Ctrl() const;
240 
244  public: void SetCtrl(const std::string &_ctrl);
245 
248  public: std::string MsgTypeName() const;
249 
253  public: void SetMsgTypeName(const std::string &_msgTypeName);
254 
258  public: virtual const AdvertiseMessageOptions &Options() const;
259 
263  public: void SetOptions(const AdvertiseMessageOptions &_opts);
264 
268  public: friend std::ostream &operator<<(std::ostream &_out,
269  const MessagePublisher &_msg)
270  {
271  _out << "Publisher:" << std::endl
272  << "\tTopic: [" << _msg.Topic() << "]" << std::endl
273  << "\tAddress: " << _msg.Addr() << std::endl
274  << "\tProcess UUID: " << _msg.PUuid() << std::endl
275  << "\tNode UUID: " << _msg.NUuid() << std::endl
276  << "\tControl address: " << _msg.Ctrl() << std::endl
277  << "\tMessage type: " << _msg.MsgTypeName() << std::endl
278  << _msg.Options();
279  return _out;
280  }
281 
287  public: bool operator==(const MessagePublisher &_pub) const;
288 
294  public: bool operator!=(const MessagePublisher &_pub) const;
295 
299  public: MessagePublisher &operator=(const MessagePublisher &_other);
300 
302  private: std::string ctrl;
303 
305  private: std::string msgTypeName;
306 
308  private: AdvertiseMessageOptions msgOpts;
309  };
310 
314  class IGNITION_TRANSPORT_VISIBLE ServicePublisher : public Publisher
315  {
317  public: ServicePublisher() = default;
318 
328  public: ServicePublisher(const std::string &_topic,
329  const std::string &_addr,
330  const std::string &_id,
331  const std::string &_pUuid,
332  const std::string &_nUuid,
333  const std::string &_reqType,
334  const std::string &_repType,
335  const AdvertiseServiceOptions &_opts);
336 
339  public: ServicePublisher(const ServicePublisher &_other);
340 
342  public: virtual ~ServicePublisher() = default;
343 
344  // Documentation inherited.
345  public: size_t Pack(char *_buffer) const;
346 
347  // Documentation inherited.
348  public: size_t Unpack(const char *_buffer);
349 
350  // Documentation inherited.
351  public: size_t MsgLength() const;
352 
356  public: std::string SocketId() const;
357 
361  public: void SetSocketId(const std::string &_socketId);
362 
366  public: std::string ReqTypeName() const;
367 
371  public: std::string RepTypeName() const;
372 
376  public: void SetReqTypeName(const std::string &_reqTypeName);
377 
381  public: void SetRepTypeName(const std::string &_repTypeName);
382 
386  public: virtual const AdvertiseServiceOptions& Options() const;
387 
391  public: void SetOptions(const AdvertiseServiceOptions &_opts);
392 
396  public: friend std::ostream &operator<<(std::ostream &_out,
397  const ServicePublisher &_msg)
398  {
399  _out << "Publisher:" << std::endl
400  << "\tTopic: [" << _msg.Topic() << "]" << std::endl
401  << "\tAddress: " << _msg.Addr() << std::endl
402  << "\tProcess UUID: " << _msg.PUuid() << std::endl
403  << "\tNode UUID: " << _msg.NUuid() << std::endl
404  << "\tSocket ID: " << _msg.SocketId() << std::endl
405  << "\tRequest type: " << _msg.ReqTypeName() << std::endl
406  << "\tResponse type: " << _msg.RepTypeName() << std::endl
407  << _msg.Options();
408 
409  return _out;
410  }
411 
417  public: bool operator==(const ServicePublisher &_srv) const;
418 
424  public: bool operator!=(const ServicePublisher &_srv) const;
425 
427  private: std::string socketId;
428 
430  private: std::string reqTypeName;
431 
433  private: std::string repTypeName;
434 
436  private: AdvertiseServiceOptions srvOpts;
437  };
438  }
439 }
440 
441 #endif
friend std::ostream & operator<<(std::ostream &_out, const Publisher &_msg)
Stream insertion operator.
Definition: Publisher.hh:148
bool operator!=(const MessagePublisher &_pub) const
Inequality operator. This function checks if the given message publisher does not have identical Topi...
bool operator==(const MessagePublisher &_pub) const
Equality operator. This function checks if the given message publisher has identical Topic,...
size_t PackInternal(char *_buffer) const
Serialize all fields except the advertise options. This is useful when we are serializing a derived c...
virtual const AdvertiseOptions & Options() const
Get the advertised options.
virtual size_t Pack(char *_buffer) const
Serialize the publisher. The caller has ownership of the buffer and is responsible for its [de]alloca...
Definition: AdvertiseOptions.hh:27
STL class.
std::string ReqTypeName() const
Get the name of the request's protobuf message advertised.
void SetReqTypeName(const std::string &_reqTypeName)
Set the name of the request's protobuf message advertised.
This class stores all the information about a publisher. It stores the topic name that publishes,...
Definition: Publisher.hh:37
virtual const AdvertiseServiceOptions & Options() const
Get the advertised options.
virtual ~ServicePublisher()=default
Destructor.
std::string addr
ZeroMQ address of the publisher.
Definition: Publisher.hh:182
std::string PUuid() const
Get the process UUID of the publisher. return Process UUID.
size_t Unpack(const char *_buffer)
Unserialize the publisher.
virtual size_t Pack(char *_buffer) const
Serialize the publisher. The caller has ownership of the buffer and is responsible for its [de]alloca...
virtual ~MessagePublisher()=default
Destructor.
size_t MsgLengthInternal() const
Get the total length of the message without counting the advertised options. This is useful when [un]...
bool operator==(const Publisher &_pub) const
Equality operator. This function checks if the given publisher has identical Topic,...
void SetNUuid(const std::string &_nUuid)
Set the node UUID of the publisher.
void SetCtrl(const std::string &_ctrl)
Set the ZeroMQ control address of the publisher.
This class stores all the information about a message publisher.
Definition: Publisher.hh:198
A class for customizing the publication options for a topic or service advertised....
Definition: AdvertiseOptions.hh:54
std::string Topic() const
Get the topic published by this publisher.
std::string Addr() const
Get the ZeroMQ address of the publisher.
std::string SocketId() const
Get the ZeroMQ socket ID used by this publisher.
friend std::ostream & operator<<(std::ostream &_out, const ServicePublisher &_msg)
Stream insertion operator.
Definition: Publisher.hh:396
bool operator!=(const ServicePublisher &_srv) const
Inequality operator. This function checks if the given service does not have identical Topic,...
A class for customizing the publication options for a topic advertised. E.g.: Set the rate of message...
Definition: AdvertiseOptions.hh:136
void SetMsgTypeName(const std::string &_msgTypeName)
Set the message type advertised by this publisher.
bool operator==(const ServicePublisher &_srv) const
Equality operator. This function checks if the given service has identical Topic, Addr,...
std::string topic
Topic name.
Definition: Publisher.hh:179
size_t MsgLength() const
Get the total length of the message.
std::string pUuid
Process UUID of the publisher.
Definition: Publisher.hh:185
STL class.
Publisher & operator=(const Publisher &_other)
Assignment operator.
std::string nUuid
Node UUID of the publisher.
Definition: Publisher.hh:188
void SetOptions(const AdvertiseServiceOptions &_opts)
Set the advertised options.
bool operator!=(const Publisher &_pub) const
Inequality operator. This function checks if the given publisher does not have identical Topic,...
void SetOptions(const AdvertiseOptions &_opts)
Set the advertised options.
std::string MsgTypeName() const
Get the message type advertised by this publisher.
*brief Advertise a new service without any output parameter *In this version the callback is a free function *param[in] _topic Topic name associated to the service *param[in] _cb Callback to handle the service request with the *following void(*) const AdvertiseServiceOptions const ReplyT std::string _topic)
Definition: Node.hh:558
size_t Pack(char *_buffer) const
Serialize the publisher. The caller has ownership of the buffer and is responsible for its [de]alloca...
MessagePublisher & operator=(const MessagePublisher &_other)
Assignment operator.
virtual ~Publisher()=default
Destructor.
virtual size_t MsgLength() const
Get the total length of the message.
virtual const AdvertiseMessageOptions & Options() const
Get the advertised options.
void SetSocketId(const std::string &_socketId)
Set the ZeroMQ socket ID for this publisher.
Publisher()=default
Default constructor.
ServicePublisher()=default
Default constructor.
void SetOptions(const AdvertiseMessageOptions &_opts)
Set the advertised options.
virtual size_t Unpack(const char *_buffer)
Unserialize the publisher.
void SetTopic(const std::string &_topic)
Set the topic name published by this publisher.
void SetRepTypeName(const std::string &_repTypeName)
Set the name of the response's protobuf message advertised.
T endl(T... args)
void SetAddr(const std::string &_addr)
Set ZeroMQ address of the publisher.
size_t UnpackInternal(const char *_buffer)
Unserialize all fields except the advertise options. This is useful when we are unserializing a deriv...
This class stores all the information about a service publisher.
Definition: Publisher.hh:314
MessagePublisher()=default
Default constructor.
A class for customizing the publication options for a service advertised.
Definition: AdvertiseOptions.hh:224
virtual size_t Unpack(const char *_buffer)
Unserialize the publisher.
virtual size_t MsgLength() const
Get the total length of the message.
std::string Ctrl() const
Get the ZeroMQ control address. This address is used by the subscribers to notify the publisher about...
std::string RepTypeName() const
Get the name of the response's protobuf message advertised.
std::string NUuid() const
Get the node UUID of the publisher.
friend std::ostream & operator<<(std::ostream &_out, const MessagePublisher &_msg)
Stream insertion operator.
Definition: Publisher.hh:268
void SetPUuid(const std::string &_pUuid)
Set the process UUID of the publisher.