Plotly.cpp 0.1.0
A C++ plotting library for expressive, interactive, real-time & streaming data visualization
Loading...
Searching...
No Matches
websockets_server.hpp
Go to the documentation of this file.
1#ifndef PLOTLY_DETAILS_WEBSOCKETS_SERVER_HPP
2#define PLOTLY_DETAILS_WEBSOCKETS_SERVER_HPP
3
4#include "websocketpp/config/asio_no_tls.hpp"
5#include "websocketpp/roles/server_endpoint.hpp"
7#include <future>
8#include <set>
9
10namespace plotly::detail {
11using server_config = websocketpp::config::asio;
12using server_t = websocketpp::server<server_config>;
13using connection_hdl = websocketpp::connection_hdl;
15
17public:
21 auto operator=(const WebsocketServer &) -> WebsocketServer & = delete;
24
25 auto serve(std::string_view address, int port) -> bool;
26 auto hasClient() const -> bool;
27 void waitUntilNoClient() const;
28 auto getPort() const -> int;
29 void stop() override;
30
31public:
32 auto waitConnection(std::chrono::milliseconds timeout) const -> bool override;
33 auto isConnected() const -> bool override;
34 auto send(const std::string_view &message) -> bool override;
35 auto getName() const -> std::string override;
36
37protected:
38 void serviceLoop() override;
39
40private:
41 mutable std::condition_variable _connectedCv;
42 mutable std::mutex _connectionStateMutex;
43 std::set<connection_hdl, std::owner_less<connection_hdl>> _connections;
44
45 server_t _server;
46 std::promise<int> _portPromise;
47 mutable std::shared_future<int> _portFuture;
48 std::thread _serviceThread;
49
50 void setupServerHandlers();
51};
52
53} // namespace plotly::detail
54
55#endif
Base implementation class for WebSocket endpoints.
Definition websockets_endpoint.hpp:157
auto waitConnection(std::chrono::milliseconds timeout) const -> bool override
Wait for a connection to be established.
Definition websockets_server.cpp:127
auto serve(std::string_view address, int port) -> bool
Definition websockets_server.cpp:42
~WebsocketServer()
Definition websockets_server.cpp:32
WebsocketServer(const WebsocketServer &)=delete
void stop() override
Stop the endpoint and clean up resources.
Definition websockets_server.cpp:81
auto getName() const -> std::string override
Get the name/identifier of this endpoint.
Definition websockets_server.cpp:158
auto hasClient() const -> bool
Definition websockets_server.cpp:74
WebsocketServer(WebsocketServer &&)=delete
void serviceLoop() override
Pure virtual method for the main service loop.
Definition websockets_server.cpp:34
auto send(const std::string_view &message) -> bool override
Send a message through the WebSocket connection.
Definition websockets_server.cpp:139
auto getPort() const -> int
Definition websockets_server.cpp:79
auto isConnected() const -> bool override
Check if the endpoint is currently connected.
Definition websockets_server.cpp:134
void waitUntilNoClient() const
Definition websockets_server.cpp:89
auto operator=(WebsocketServer &&) -> WebsocketServer &=delete
auto operator=(const WebsocketServer &) -> WebsocketServer &=delete
WebsocketServer()
Definition websockets_server.cpp:19
Definition browser.cpp:27
server_t endpoint_t
Definition websockets_server.hpp:14
websocketpp::connection_hdl connection_hdl
Definition websockets_client.hpp:12
websocketpp::server< server_config > server_t
Definition websockets_server.hpp:12
websocketpp::config::asio server_config
Definition websockets_server.hpp:11
WebSocket endpoint interface and implementation for plotly.cpp.