WebSocketServerTransport¶
class nmeasim::io::WebSocketServerTransport · Library API
Accepts WebSocket clients and sends every line to all of them as a text frame.
#include <nmeasim/io/transports/websocket_server_transport.hpp>
Inherits nmeasim::io::Transport
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp (line 38)
The server speaks plain ws://, without TLS. A greeting can be configured, as a fixed text or as a function called for each client; it is sent to each client as soon as it connects, before any line. SimulationRunner sets a function that builds the Signal K hello message as the greeting of outputs with the signalk encoding. Clients that disconnect or report a socket error are removed at once, messages received from clients are ignored, and client_count_changed is emitted whenever a client is added or removed. Errors while accepting a connection are reported through error_occurred and leave the server open.
Summary¶
Public member functions
| Name | Description |
|---|---|
WebSocketServerTransport() |
Creates a closed server; it starts listening in open. |
~WebSocketServerTransport() |
Destroys the transport, closing it and every client connection first. |
description() |
Returns the bind address and the port. |
open() |
Starts listening on the bind address and port. |
close() |
Closes every client connection, stops listening and moves to State::Closed. |
write() |
Sends line as one text frame to every connected client. |
client_count() |
Returns the number of connected clients. |
port() |
Returns the TCP port of the server. |
set_greeting() |
Sets the text sent to every client immediately after it connects. |
set_greeting_function() |
Sets a function that builds the greeting of each client when it connects. |
greeting() |
Returns the greeting a client connecting now would receive. |
Private member functions
| Name | Description |
|---|---|
accept_connections() |
Takes every pending connection from the server, starts tracking it, sends it the greeting and emits client_count_changed. |
drop_client() |
Stops tracking client, schedules its deletion and emits client_count_changed. |
Private data members
| Name | Description |
|---|---|
server_ |
The listening server, in non-secure mode, identifying itself as NMEA Simulator X during the handshake. |
clients_ |
Connected clients, in order of connection; deleted with deleteLater when removed. |
requested_port_ |
Port passed to the constructor; 0 for a port chosen by the operating system. |
bind_address_ |
Local address to listen on. |
greeting_ |
Text sent to each client on connection; empty for none, or when greeting_function_ is set. |
greeting_function_ |
Builds the greeting of each client on connection; empty to use greeting_ instead. |
Public member functions¶
WebSocketServerTransport()¶
explicit WebSocketServerTransport(
quint16 port,
QHostAddress bind_address = QHostAddress::Any,
QObject* parent = nullptr)
Creates a closed server; it starts listening in open.
Parameters
| Name | Type | Description |
|---|---|---|
port |
quint16 |
TCP port to listen on; 0 asks the operating system for a free port, which port returns once the server is open. |
bind_address |
QHostAddress |
Local address to listen on. The default QHostAddress::Any accepts connections on every interface, IPv4 and IPv6; QHostAddress::LocalHost accepts local connections only. |
parent |
QObject* |
Qt parent that owns the transport; null leaves ownership to the caller. |
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:50 · defined in src/io/src/transports/websocket_server_transport.cpp:12
~WebSocketServerTransport()¶
~WebSocketServerTransport() override
Destroys the transport, closing it and every client connection first.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:53 · defined in src/io/src/transports/websocket_server_transport.cpp:24
description()¶
QString description() const override
Returns the bind address and the port.
Returns QString: For example WebSocket server on 127.0.0.1:3000, with the port actually listened on while open.
Overrides description · Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:59 · defined in src/io/src/transports/websocket_server_transport.cpp:28
open()¶
bool open() override
Starts listening on the bind address and port.
Returns true at once when already open. Fails with Cannot listen on <address>:<port> and the reason, for example when the port is already in use.
Returns bool: True when the server listens, false when listening failed.
Overrides open · Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:66 · defined in src/io/src/transports/websocket_server_transport.cpp:32
close()¶
void close() override
Closes every client connection, stops listening and moves to State::Closed.
Emits client_count_changed with 0, even when no client was connected.
Overrides close · Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:70 · defined in src/io/src/transports/websocket_server_transport.cpp:48
write()¶
void write(const QByteArray& line) override
Sends line as one text frame to every connected client.
The line is decoded as UTF-8 and sent with its terminator. Does nothing when no client is connected.
Parameters
| Name | Type | Description |
|---|---|---|
line |
const QByteArray& |
One complete line or message, terminator included, encoded in UTF-8. |
Overrides write · Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:77 · defined in src/io/src/transports/websocket_server_transport.cpp:63
client_count()¶
int client_count() const override
Returns the number of connected clients.
Returns int: The clients accepted and not yet removed; 0 while closed.
Overrides client_count · Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:81 · defined in src/io/src/transports/websocket_server_transport.cpp:75
port()¶
quint16 port() const
Returns the TCP port of the server.
Returns quint16: The port actually listened on while open, which is the one chosen by the operating system when 0 was requested; otherwise the requested port.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:87 · defined in src/io/src/transports/websocket_server_transport.cpp:79
set_greeting()¶
void set_greeting(QString greeting)
Sets the text sent to every client immediately after it connects.
Applies to clients that connect afterwards; clients already connected do not receive it. Replaces a function set by set_greeting_function.
Parameters
| Name | Type | Description |
|---|---|---|
greeting |
QString |
The greeting, sent as one text frame; empty disables it. |
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:95
set_greeting_function()¶
void set_greeting_function(std::function<QString()> greeting)
Sets a function that builds the greeting of each client when it connects.
The function is called once per client, on the transport's thread, just before the greeting is sent, so that a greeting carrying a time or a state is current. Applies to clients that connect afterwards and replaces a text set by set_greeting.
Parameters
| Name | Type | Description |
|---|---|---|
greeting |
std::function<QString()> |
Returns the greeting, sent as one text frame; an empty result sends none. An empty function disables the greeting. |
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:107
greeting()¶
QString greeting() const
Returns the greeting a client connecting now would receive.
Returns QString: The result of the function set by set_greeting_function when one is set, otherwise the text set by set_greeting; empty when neither is set.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:115
Private member functions¶
accept_connections()¶
void accept_connections()
Takes every pending connection from the server, starts tracking it, sends it the greeting and emits client_count_changed.
Connected to QWebSocketServer::newConnection.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:123 · defined in src/io/src/transports/websocket_server_transport.cpp:83
drop_client()¶
void drop_client(QWebSocket* client)
Stops tracking client, schedules its deletion and emits client_count_changed.
Connected to the disconnected and errorOccurred signals of every client; a client that is no longer tracked is ignored, so a client reporting both is removed once.
Parameters
| Name | Type | Description |
|---|---|---|
client |
QWebSocket* |
The client socket to remove. |
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:130 · defined in src/io/src/transports/websocket_server_transport.cpp:96
Private data members¶
server_¶
QWebSocketServer server_
The listening server, in non-secure mode, identifying itself as NMEA Simulator X during the handshake.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:134
clients_¶
QList<QWebSocket *> clients_
Connected clients, in order of connection; deleted with deleteLater when removed.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:136
requested_port_¶
quint16 requested_port_
Port passed to the constructor; 0 for a port chosen by the operating system.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:138
bind_address_¶
QHostAddress bind_address_
Local address to listen on.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:140
greeting_¶
QString greeting_
Text sent to each client on connection; empty for none, or when greeting_function_ is set.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:143
greeting_function_¶
std::function<QString()> greeting_function_
Builds the greeting of each client on connection; empty to use greeting_ instead.
Declared in src/io/include/nmeasim/io/transports/websocket_server_transport.hpp:145
Inherited members¶
From nmeasim::io::WebSocketServerTransport: bytes_written(), client_count_changed(), count_bytes(), error_occurred(), fail(), is_open(), last_error(), set_state(), State, state(), state_changed(), Transport()