00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROSCPP_INTRAPROCESS_PUBLISHER_LINK_H
00029 #define ROSCPP_INTRAPROCESS_PUBLISHER_LINK_H
00030
00031 #include "publisher_link.h"
00032 #include "common.h"
00033
00034 #include <boost/thread/recursive_mutex.hpp>
00035
00036 namespace ros
00037 {
00038 class Subscription;
00039 typedef boost::shared_ptr<Subscription> SubscriptionPtr;
00040 typedef boost::weak_ptr<Subscription> SubscriptionWPtr;
00041
00042 class IntraProcessSubscriberLink;
00043 typedef boost::shared_ptr<IntraProcessSubscriberLink> IntraProcessSubscriberLinkPtr;
00044
00049 class ROSCPP_DECL IntraProcessPublisherLink : public PublisherLink
00050 {
00051 public:
00052 IntraProcessPublisherLink(const SubscriptionPtr& parent, const std::string& xmlrpc_uri, const TransportHints& transport_hints);
00053 virtual ~IntraProcessPublisherLink();
00054
00055 void setPublisher(const IntraProcessSubscriberLinkPtr& publisher);
00056
00057 virtual std::string getTransportType();
00058 virtual void drop();
00059
00063 virtual void handleMessage(const SerializedMessage& m, bool ser, bool nocopy);
00064
00065 void getPublishTypes(bool& ser, bool& nocopy, const std::type_info& ti);
00066
00067 private:
00068 IntraProcessSubscriberLinkPtr publisher_;
00069 bool dropped_;
00070 boost::recursive_mutex drop_mutex_;
00071 };
00072 typedef boost::shared_ptr<IntraProcessPublisherLink> IntraProcessPublisherLinkPtr;
00073
00074 }
00075
00076 #endif // ROSCPP_INTRAPROCESS_PUBLISHER_LINK_H
00077
00078
00079