RSB  0.19.0
BusImpl.h
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is part of the RSB project
4  *
5  * Copyright (C) 2011-2018 Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
6  *
7  * This file may be licensed under the terms of the
8  * GNU Lesser General Public License Version 3 (the ``LGPL''),
9  * or (at your option) any later version.
10  *
11  * Software distributed under the License is distributed
12  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
13  * express or implied. See the LGPL for the specific language
14  * governing rights and limitations.
15  *
16  * You should have received a copy of the LGPL along with this
17  * program. If not, go to http://www.gnu.org/licenses/lgpl.html
18  * or write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The development of this software was supported by:
22  * CoR-Lab, Research Institute for Cognition and Robotics
23  * Bielefeld University
24  *
25  * ============================================================ */
26 
27 #pragma once
28 
29 #include <string>
30 #include <list>
31 
32 #include <boost/shared_ptr.hpp>
33 
34 #include <boost/thread/recursive_mutex.hpp>
35 
36 #include <rsc/logging/Logger.h>
37 
38 #include "../../Event.h"
39 #include "../../Scope.h"
40 
41 #include "../../eventprocessing/Handler.h"
42 #include "../../eventprocessing/ScopeDispatcher.h"
43 
44 #include "../AsioServiceContext.h"
45 
46 #include "Bus.h"
47 #include "BusConnection.h"
48 
49 #include "rsb/rsbexports.h"
50 
51 namespace rsb {
52 namespace transport {
53 namespace socket {
54 
55 class InConnector;
56 typedef boost::shared_ptr<InConnector> InConnectorPtr;
57 
58 class ConnectorBase;
59 
63 class RSB_EXPORT BusImpl: public virtual Bus {
64 friend class BusConnection;
65 public:
66  BusImpl(AsioServiceContextPtr asioService,
67  bool tcpnodelay = false);
68  virtual ~BusImpl();
69 
70  virtual void addSink(InConnectorPtr sink);
71  virtual void removeSink(const InConnector* sink);
72 
80  virtual void addConnection(BusConnectionPtr connection);
81 
88  virtual void removeConnection(BusConnectionPtr connection);
89 
90  virtual bool isTcpnodelay() const;
91 
92  virtual void handle(EventPtr event);
93 
94  virtual void handleIncoming(EventPtr event,
95  BusConnectionPtr connection);
96 
97  virtual void printContents(std::ostream& stream) const;
98 
99  virtual const std::string getTransportURL() const;
100 
101 protected:
102  typedef std::list<BusConnectionPtr> ConnectionList;
103 
104  ConnectionList getConnections() const;
105  boost::recursive_mutex& getConnectionLock();
106 
107  virtual AsioServiceContextPtr getService() const;
108 private:
110 
111  rsc::logging::LoggerPtr logger;
112 
113  // the asio service this bus operates on. Storing this pointer keeps the
114  // service alive as long as this instance is alive
116 
117  ConnectionList connections;
118  boost::recursive_mutex connectionLock;
119 
120  SinkDispatcher sinkDispatcher;
121  boost::recursive_mutex connectorLock;
122 
124 
125 };
126 
127 }
128 }
129 }
AsioServiceContextPtr asioService
Definition: BusImpl.h:115
boost::shared_ptr< InConnector > InConnectorPtr
Definition: Bus.h:43
Instances of this class provide access to a socket-based bus.
Definition: Bus.h:64
EventPtr event
Definition: BusImpl.cpp:129
eventprocessing::WeakScopeDispatcher< InConnector > SinkDispatcher
Definition: BusImpl.h:109
boost::shared_ptr< AsioServiceContext > AsioServiceContextPtr
boost::recursive_mutex connectorLock
Definition: BusImpl.h:121
Instances of this class receive events from a bus that is accessed via a socket connection.
Definition: InConnector.h:61
ConnectionList connections
Definition: BusImpl.h:117
rsc::logging::LoggerPtr logger
Definition: BusImpl.h:111
boost::recursive_mutex connectionLock
Definition: BusImpl.h:118
boost::shared_ptr< BusConnection > BusConnectionPtr
Definition: Bus.h:46
SinkDispatcher sinkDispatcher
Definition: BusImpl.h:120
Instances of this class implement connections to a socket-based bus.
Definition: BusConnection.h:74
boost::shared_ptr< Event > EventPtr
Definition: Event.h:264
std::list< BusConnectionPtr > ConnectionList
Definition: BusImpl.h:102