FastMM documentation
FastMM C++ API 0.6.0
Public headers, tier 1 and tier 2
Loading...
Searching...
No Matches
fastmm::net::WsClient< Stream, Handler > Class Template Referencefinal

#include <fastmm/net/ws_client.hpp>

Inheritance diagram for fastmm::net::WsClient< Stream, Handler >:
fastmm::net::IoHandler

Public Member Functions

 WsClient (Reactor &reactor, Stream &&stream, Handler &handler, const WsClientConfig &cfg={})
 
 ~WsClient () override
 
 WsClient (const WsClient &)=delete
 
WsClient & operator= (const WsClient &)=delete
 
bool start (std::string_view host, std::uint16_t port, bool tls, std::string_view target, std::string_view extra_headers={})
 Registers with the reactor and begins the connect/TLS/upgrade sequence.
 
bool send_text (std::string_view text) noexcept
 False means the frame did not go out: the client is not open, the frame did not fit, or the write failed and closed the stream (on_ws_error already fired).
 
bool send_binary (std::span< const std::byte > data) noexcept
 
bool send_ping (std::span< const std::byte > data={}) noexcept
 
bool send_pong (std::span< const std::byte > data={}) noexcept
 
void cork () noexcept
 Between cork() and uncork() data frames are only encoded into the send buffer; uncork() writes them together (one TLS write and one write(2) for the lot when the kernel takes it).
 
bool uncork () noexcept
 
bool send_close (WsCloseCode code=WsCloseCode::Normal, std::string_view reason={}) noexcept
 Starts the closing handshake; on_ws_close fires when the peer echoes the close frame.
 
void close () noexcept
 Immediate teardown, no callbacks.
 
WsState state () const noexcept
 
bool is_open () const noexcept
 
const WsStats & stats () const noexcept
 
std::size_t pending_send_bytes () const noexcept
 
Stream & stream () noexcept
 
int fd () const noexcept
 
void on_readable () override
 
void on_writable () override
 
void on_error (int err) override
 POLLERR (or a poll request the kernel refused).
 
void on_message (WsOpcode op, std::span< std::byte > payload) noexcept
 
void on_control (WsOpcode op, std::span< std::byte > payload) noexcept
 
- Public Member Functions inherited from fastmm::net::IoHandler
virtual ~IoHandler ()=default
 

Constructor & Destructor Documentation

◆ WsClient() [1/2]

template<ByteStream Stream, WsClientHandler Handler>
fastmm::net::WsClient< Stream, Handler >::WsClient ( Reactor &  reactor,
Stream &&  stream,
Handler &  handler,
const WsClientConfig &  cfg = {} 
)
inline

◆ ~WsClient()

template<ByteStream Stream, WsClientHandler Handler>
fastmm::net::WsClient< Stream, Handler >::~WsClient ( )
inlineoverride

◆ WsClient() [2/2]

template<ByteStream Stream, WsClientHandler Handler>
fastmm::net::WsClient< Stream, Handler >::WsClient ( const WsClient< Stream, Handler > &  )
delete

Member Function Documentation

◆ operator=()

template<ByteStream Stream, WsClientHandler Handler>
WsClient & fastmm::net::WsClient< Stream, Handler >::operator= ( const WsClient< Stream, Handler > &  )
delete

◆ start()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::start ( std::string_view  host,
std::uint16_t  port,
bool  tls,
std::string_view  target,
std::string_view  extra_headers = {} 
)
inline

Registers with the reactor and begins the connect/TLS/upgrade sequence.

The stream must already hold a socket that is connected or connecting.

◆ send_text()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::send_text ( std::string_view  text)
inlinenoexcept

False means the frame did not go out: the client is not open, the frame did not fit, or the write failed and closed the stream (on_ws_error already fired).

A frame the kernel did not take yet is queued for writability and counts as sent. Between cork() and uncork() a data frame is only encoded, so uncork() reports its write instead.

◆ send_binary()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::send_binary ( std::span< const std::byte >  data)
inlinenoexcept

◆ send_ping()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::send_ping ( std::span< const std::byte >  data = {})
inlinenoexcept

◆ send_pong()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::send_pong ( std::span< const std::byte >  data = {})
inlinenoexcept

◆ cork()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::cork ( )
inlinenoexcept

Between cork() and uncork() data frames are only encoded into the send buffer; uncork() writes them together (one TLS write and one write(2) for the lot when the kernel takes it).

uncork() may invoke on_ws_error, like send_text(); it returns false when the client is not open afterwards.

◆ uncork()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::uncork ( )
inlinenoexcept

◆ send_close()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::send_close ( WsCloseCode  code = WsCloseCode::Normal,
std::string_view  reason = {} 
)
inlinenoexcept

Starts the closing handshake; on_ws_close fires when the peer echoes the close frame.

< before flush(): a write failure may report on_ws_error

◆ close()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::close ( )
inlinenoexcept

Immediate teardown, no callbacks.

◆ state()

template<ByteStream Stream, WsClientHandler Handler>
WsState fastmm::net::WsClient< Stream, Handler >::state ( ) const
inlinenoexcept

◆ is_open()

template<ByteStream Stream, WsClientHandler Handler>
bool fastmm::net::WsClient< Stream, Handler >::is_open ( ) const
inlinenoexcept

◆ stats()

template<ByteStream Stream, WsClientHandler Handler>
const WsStats & fastmm::net::WsClient< Stream, Handler >::stats ( ) const
inlinenoexcept

◆ pending_send_bytes()

template<ByteStream Stream, WsClientHandler Handler>
std::size_t fastmm::net::WsClient< Stream, Handler >::pending_send_bytes ( ) const
inlinenoexcept

◆ stream()

template<ByteStream Stream, WsClientHandler Handler>
Stream & fastmm::net::WsClient< Stream, Handler >::stream ( )
inlinenoexcept

◆ fd()

template<ByteStream Stream, WsClientHandler Handler>
int fastmm::net::WsClient< Stream, Handler >::fd ( ) const
inlinenoexcept

◆ on_readable()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::on_readable ( )
inlineoverridevirtual

◆ on_writable()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::on_writable ( )
inlineoverridevirtual

◆ on_error()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::on_error ( int  err)
inlineoverridevirtual

POLLERR (or a poll request the kernel refused).

err is the socket's SO_ERROR when retrievable (the refused request's errno for the latter), else 0.

Implements fastmm::net::IoHandler.

◆ on_message()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::on_message ( WsOpcode  op,
std::span< std::byte >  payload 
)
inlinenoexcept

< handler closed us mid-batch

◆ on_control()

template<ByteStream Stream, WsClientHandler Handler>
void fastmm::net::WsClient< Stream, Handler >::on_control ( WsOpcode  op,
std::span< std::byte >  payload 
)
inlinenoexcept

Peer-initiated close: echo the code (ยง5.5.1) then tear down.

< the echo failed: on_ws_error already fired