Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
OutputDevice_Network.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2006-2024 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// An output device for TCP/IP Network connections
21/****************************************************************************/
22
23
24// ==========================================================================
25// included modules
26// ==========================================================================
27#include <config.h>
28
29#include <thread>
30#include <chrono>
31#include <vector>
35
36
37// ==========================================================================
38// method definitions
39// ==========================================================================
41 const int port) : OutputDevice(0, host + ":" + toString(port)) {
42 mySocket = new tcpip::Socket(host, port);
43 for (int wait = 1; wait < 10; wait += 1) {
44 try {
46 break;
47 } catch (tcpip::SocketException& e) {
48 if (wait == 9) {
49 throw IOError(toString(e.what()) + " (host: " + host + ", port: " + toString(port) + ")");
50 }
51 std::this_thread::sleep_for(std::chrono::seconds(wait));
52 }
53 }
54}
55
56
61
62
63std::ostream&
67
68
69void
71 const std::string toSend = myMessage.str();
72 myMessage.str("");
73 if (toSend.empty() || !mySocket->has_client_connection()) {
74 return;
75 }
76 std::vector<unsigned char> msg;
77 msg.insert(msg.end(), toSend.begin(), toSend.end());
78 try {
79 mySocket->send(msg);
80 } catch (const tcpip::SocketException& e) {
81 mySocket->close();
82 throw IOError(e.what());
83 }
84}
85
86
87/****************************************************************************/
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
OutputDevice_Network(const std::string &host, const int port)
Constructor.
tcpip::Socket * mySocket
the socket to transfer the data
std::ostringstream myMessage
packet buffer
std::ostream & getOStream()
Returns the associated ostream.
virtual void postWriteHook()
Sends the data which was written to the string stream over the socket.
Static storage of an output device and its base (abstract) implementation.
bool has_client_connection() const
Definition socket.cpp:542
void connect()
Connects to host_:port_.
Definition socket.cpp:332
void send(const std::vector< unsigned char > &buffer)
Definition socket.cpp:383
void close()
Definition socket.cpp:365