publication.h
Go to the documentation of this file.
1 #include "sick_scan/sick_scan_base.h" /* Base definitions included in all header files, added by add_sick_scan_base_header.py. Do not edit this line. */
2 /*
3  * Copyright (C) 2008, Morgan Quigley and Willow Garage, Inc.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef ROSCPP_PUBLICATION_H
30 #define ROSCPP_PUBLICATION_H
31 
32 #include "ros/forwards.h"
33 #include "ros/advertise_options.h"
34 #include "common.h"
35 #include "xmlrpcpp/XmlRpc.h"
36 
37 #include <mutex>
38 
39 #include <memory>
40 //#include <boost/shared_array.hpp>
41 
42 #include <vector>
43 
44 namespace roswrap
45 {
46 
47 class SubscriberLink;
48 typedef std::shared_ptr<SubscriberLink> SubscriberLinkPtr;
49 typedef std::vector<SubscriberLinkPtr> V_SubscriberLink;
50 
55 {
56 public:
57  Publication(const std::string &name,
58  const std::string& datatype,
59  const std::string& _md5sum,
60  const std::string& message_definition,
61  size_t max_queue,
62  bool latch,
63  bool has_header);
64 
65  ~Publication();
66 
67  void addCallbacks(const SubscriberCallbacksPtr& callbacks);
68  void removeCallbacks(const SubscriberCallbacksPtr& callbacks);
69 
73  bool enqueueMessage(const SerializedMessage& m);
77  inline size_t getMaxQueue() { return max_queue_; }
81  XmlRpc::XmlRpcValue getStats();
85  void getInfo(XmlRpc::XmlRpcValue& info);
86 
90  bool hasSubscribers();
94  uint32_t getNumSubscribers();
95 
96  void getPublishTypes(bool& serialize, bool& nocopy, const std::type_info& ti);
97 
101  const std::string& getName() const { return name_; }
105  const std::string& getDataType() const { return datatype_; }
109  const std::string& getMD5Sum() const { return md5sum_; }
113  const std::string& getMessageDefinition() const { return message_definition_; }
117  uint32_t getSequence() { return seq_; }
118 
119  bool isLatched() { return latch_; }
120 
124  void addSubscriberLink(const SubscriberLinkPtr& sub_link);
128  void removeSubscriberLink(const SubscriberLinkPtr& sub_link);
129 
133  void drop();
137  bool isDropped() { return dropped_; }
138 
139  uint32_t incrementSequence();
140 
141  size_t getNumCallbacks();
142 
143  bool isLatching() { return latch_; }
144 
145  void publish(SerializedMessage& m);
146  void processPublishQueue();
147 
148  bool validateHeader(const Header& h, std::string& error_msg);
149 
150 private:
151  void dropAllConnections();
152 
156  void peerConnect(const SubscriberLinkPtr& sub_link);
160  void peerDisconnect(const SubscriberLinkPtr& sub_link);
161 
162  std::string name_;
163  std::string datatype_;
164  std::string md5sum_;
165  std::string message_definition_;
166  size_t max_queue_;
167  uint32_t seq_;
168  std::mutex seq_mutex_;
169 
170  typedef std::vector<SubscriberCallbacksPtr> V_Callback;
172  std::mutex callbacks_mutex_;
173 
175  // We use a recursive mutex here for the rare case that a publish call causes another one (like in the case of a rosconsole call)
177 
178  bool dropped_;
179 
180  bool latch_;
183 
185 
186  typedef std::vector<SerializedMessage> V_SerializedMessage;
189 };
190 
191 }
192 
193 #endif // ROSCPP_PUBLICATION_H
roswrap::Publication::last_message_
SerializedMessage last_message_
Definition: publication.h:182
roswrap::Publication::subscriber_links_mutex_
std::mutex subscriber_links_mutex_
Definition: publication.h:176
roswrap::message_traits::datatype
const char * datatype()
returns DataType<M>::value();
Definition: message_traits.h:236
roswrap::Publication::latch_
bool latch_
Definition: publication.h:180
roswrap::serialization::serialize
void serialize(Stream &stream, const T &t)
Serialize an object. Stream here should normally be a ros::serialization::OStream.
Definition: serialization.h:153
roswrap::Publication::has_header_
bool has_header_
Definition: publication.h:181
roswrap::Publication::getMessageDefinition
const std::string & getMessageDefinition() const
Returns the full definition of the message published by this publication.
Definition: publication.h:113
roswrap::V_SubscriberLink
std::vector< SubscriberLinkPtr > V_SubscriberLink
Definition: forwards.h:73
roswrap::Publication::V_SerializedMessage
std::vector< SerializedMessage > V_SerializedMessage
Definition: publication.h:186
roswrap::Publication::callbacks_mutex_
std::mutex callbacks_mutex_
Definition: publication.h:172
roswrap::SerializedMessage
Definition: serialized_message.h:40
roswrap::Publication::dropped_
bool dropped_
Definition: publication.h:178
roswrap::Publication::isDropped
bool isDropped()
Returns if this publication is valid or not.
Definition: publication.h:137
api.setup.name
name
Definition: python/api/setup.py:12
roswrap::Publication::publish_queue_
V_SerializedMessage publish_queue_
Definition: publication.h:187
roswrap::Publication::getDataType
const std::string & getDataType() const
Returns the data type of the message published by this publication.
Definition: publication.h:105
roswrap::Publication::seq_mutex_
std::mutex seq_mutex_
Definition: publication.h:168
roswrap::Publication::isLatched
bool isLatched()
Definition: publication.h:119
roswrap::Publication::seq_
uint32_t seq_
Definition: publication.h:167
roswrap
Definition: param_modi.cpp:41
roswrap::Publication::publish_queue_mutex_
std::mutex publish_queue_mutex_
Definition: publication.h:188
roswrap::Publication::subscriber_links_
V_SubscriberLink subscriber_links_
Definition: publication.h:174
roswrap::Publication::max_queue_
size_t max_queue_
Definition: publication.h:166
roswrap::Publication::callbacks_
V_Callback callbacks_
Definition: publication.h:171
roswrap::Publication::name_
std::string name_
Definition: publication.h:162
common.h
roswrap::SubscriberLinkPtr
std::shared_ptr< SubscriberLink > SubscriberLinkPtr
Definition: forwards.h:71
roswrap::Publication::getName
const std::string & getName() const
Returns the name of the topic this publication broadcasts to.
Definition: publication.h:101
roswrap::Publication::intraprocess_subscriber_count_
uint32_t intraprocess_subscriber_count_
Definition: publication.h:184
roswrap::Header
Provides functionality to parse a connection header and retrieve values from it.
Definition: header.h:53
sick_scan_base.h
roswrap::Publication::getMaxQueue
size_t getMaxQueue()
returns the max queue size of this publication
Definition: publication.h:77
roswrap::Publication
A Publication manages an advertised topic.
Definition: publication.h:54
roswrap::Publication::datatype_
std::string datatype_
Definition: publication.h:163
roswrap::SubscriberCallbacksPtr
std::shared_ptr< SubscriberCallbacks > SubscriberCallbacksPtr
Definition: forwards.h:128
ROSCPP_DECL
#define ROSCPP_DECL
Definition: roswrap/src/cfgsimu/sick_scan/ros/common.h:63
roswrap::Publication::getMD5Sum
const std::string & getMD5Sum() const
Returns the md5sum of the message published by this publication.
Definition: publication.h:109
roswrap::Publication::message_definition_
std::string message_definition_
Definition: publication.h:165
roswrap::Publication::getSequence
uint32_t getSequence()
Returns the sequence number.
Definition: publication.h:117
XmlRpc::XmlRpcValue
RPC method arguments and results are represented by Values.
Definition: XmlRpcValue.h:25
roswrap::Publication::isLatching
bool isLatching()
Definition: publication.h:143
roswrap::Publication::md5sum_
std::string md5sum_
Definition: publication.h:164
roswrap::Publication::V_Callback
std::vector< SubscriberCallbacksPtr > V_Callback
Definition: publication.h:170


sick_scan_xd
Author(s): Michael Lehning , Jochen Sprickerhof , Martin Günther
autogenerated on Fri Oct 25 2024 02:47:10