RSB  0.17.0
LifecycledBusServer.cpp
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is part of the RSB project
4  *
5  * Copyright (C) 2014 Johannes Wienke <jwienke at techfak dot uni-bielefeld dot 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 #include "LifecycledBusServer.h"
28 
29 using namespace std;
30 
31 using namespace rsc::logging;
32 
33 namespace rsb {
34 namespace transport {
35 namespace socket {
36 
37 LifecycledBusServer::LifecycledBusServer(BusServerPtr server) :
39  Logger::getLogger("rsb.transport.socket.LifecycledBusServer")), server(
40  server) {
41 }
42 
44  RSCDEBUG(logger, "Destructing");
45  // This is the important aspect. We break the dependency cycle between the
46  // asio service and BusServerImpl by explicitly disabling the service so
47  // that asio releases the handle to BusServerImpl.
48  this->server->deactivate();
49 }
50 
52  this->server->addSink(sink);
53 }
54 
56  this->server->removeSink(sink);
57 }
58 
60  this->server->addConnection(connection);
61 }
62 
64  this->server->removeConnection(connection);
65 }
66 
68  return this->server->isTcpnodelay();
69 }
70 
72  this->server->handle(event);
73 }
74 
76  return server->getService();
77 }
78 
80  RSCDEBUG(logger, "Activating");
81  this->server->activate();
82 }
83 
85  RSCDEBUG(logger, "Deactivating");
86  this->server->deactivate();
87 }
88 
90  BusConnectionPtr connection) {
91  this->server->handleIncoming(event, connection);
92 }
93 
95  return this->server->getTransportURL();
96 }
97 
98 void LifecycledBusServer::printContents(std::ostream& stream) const {
99  stream << this->server;
100 }
101 
102 }
103 }
104 }
virtual AsioServiceContextPtr getService() const
boost::shared_ptr< InConnector > InConnectorPtr
Definition: Bus.h:55
void handleIncoming(EventPtr event, BusConnectionPtr connection)
Instances of this class provide access to a socket-based bus.
Definition: Bus.h:75
STL namespace.
boost::shared_ptr< AsioServiceContext > AsioServiceContextPtr
boost::shared_ptr< BusConnection > BusConnectionPtr
virtual const std::string getTransportURL() const
Instances of this class receive events from a bus that is accessed via a socket connection.
Definition: InConnector.h:61
boost::shared_ptr< BusServer > BusServerPtr
Definition: BusServer.h:67
Instances of this class provide access to a socket-based bus for local and remote bus clients...
Definition: BusServer.h:54
virtual void addConnection(BusConnectionPtr connection)
Adds connection to the list of connections of the bus.
virtual void removeConnection(BusConnectionPtr connection)
Removes connection from the list of connections of this bus.
virtual void addSink(InConnectorPtr sink)
virtual void handle(EventPtr event)
Handle event.
virtual void printContents(std::ostream &stream) const
virtual void removeSink(InConnector *sink)
boost::shared_ptr< Event > EventPtr
Definition: Event.h:264