15template <net::ConnectionHandler Handler>
29 if (url && url->tls) {
30 tls_ = std::make_unique<Tls>(reactor, std::move(cfg), handler);
32 plain_ = std::make_unique<Plain>(reactor, std::move(cfg), handler);
37 void reset() noexcept {
41 [[nodiscard]]
bool opened() const noexcept {
return plain_ || tls_; }
44 if (plain_) plain_->connect();
45 if (tls_) tls_->connect();
48 if (plain_) plain_->close();
49 if (tls_) tls_->close();
51 bool send_text(std::string_view t)
noexcept {
52 if (plain_)
return plain_->send_text(t);
53 if (tls_)
return tls_->send_text(t);
56 void cork() noexcept {
57 if (plain_) plain_->cork();
58 if (tls_) tls_->cork();
61 if (plain_)
return plain_->uncork();
62 if (tls_)
return tls_->uncork();
66 if (plain_) plain_->auth_done();
67 if (tls_) tls_->auth_done();
70 if (plain_) plain_->subscribe_done();
71 if (tls_) tls_->subscribe_done();
74 if (plain_)
return plain_->state();
75 if (tls_)
return tls_->state();
78 [[nodiscard]]
bool is_live() const noexcept {
79 if (plain_)
return plain_->is_live();
80 if (tls_)
return tls_->is_live();
84 if (plain_)
return plain_->stats();
85 if (tls_)
return tls_->stats();
88 [[nodiscard]] std::int64_t
last_rx_ns() const noexcept {
89 if (plain_)
return plain_->last_rx_ns();
90 if (tls_)
return tls_->last_rx_ns();
95 std::unique_ptr<Plain> plain_;
96 std::unique_ptr<Tls> tls_;
Definition connection.hpp:116
Definition reactor.hpp:72
Definition connection_slot.hpp:18
net::ConnectionStats stats() const noexcept
Definition connection_slot.hpp:85
void subscribe_done()
Definition connection_slot.hpp:71
void open(net::Reactor &reactor, net::ConnectionConfig cfg, Handler &handler)
Throws std::invalid_argument on a bad URL (from validate_connection_config).
Definition connection_slot.hpp:28
ConnectionSlot & operator=(const ConnectionSlot &)=delete
bool opened() const noexcept
Definition connection_slot.hpp:43
void connect()
Definition connection_slot.hpp:45
bool uncork() noexcept
Definition connection_slot.hpp:62
bool is_live() const noexcept
Definition connection_slot.hpp:80
void cork() noexcept
Definition connection_slot.hpp:58
void reset() noexcept
Never call from inside the connection's own callbacks (net contract): the venue posts the reset to th...
Definition connection_slot.hpp:39
net::ConnState state() const noexcept
Definition connection_slot.hpp:75
std::int64_t last_rx_ns() const noexcept
Definition connection_slot.hpp:90
void auth_done()
Definition connection_slot.hpp:67
void close()
Definition connection_slot.hpp:49
bool send_text(std::string_view t) noexcept
Definition connection_slot.hpp:53
Resilient WebSocket connection: DNS -> TCP -> TLS -> WS upgrade -> auth -> subscribe -> Live,...
ConnState
Definition connection.hpp:48
Definition connection.hpp:64
std::string url
ws:// or wss://host[:port]/path?query
Definition connection.hpp:65
Definition connection.hpp:102
static std::optional< Url > parse(std::string_view s) noexcept
Accepts scheme://host[:port][/path][?query].
Definition url.hpp:38