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-2025 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 {
45 mySocket->connect();
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.
OutputDevice(const int defaultIndentation=0, const std::string &filename="")
Constructor.