38#include <asio/any_io_executor.hpp>
39#include <asio/awaitable.hpp>
49namespace neograph::async {
51enum class WsOpcode : std::uint8_t {
86 asio::awaitable<void>
send_text(std::string_view payload);
97 std::uint16_t code = 1000, std::string_view reason =
"");
107 asio::awaitable<WsMessage>
recv();
114 friend NEOGRAPH_API asio::awaitable<std::unique_ptr<WsClient>>
116 asio::any_io_executor, std::string_view, std::string_view,
117 std::string_view, std::vector<std::pair<std::string, std::string>>,
121 std::unique_ptr<Impl> impl_;
123 explicit WsClient(std::unique_ptr<Impl>);
141NEOGRAPH_API asio::awaitable<std::unique_ptr<WsClient>>
ws_connect(
142 asio::any_io_executor ex,
143 std::string_view host,
144 std::string_view port,
145 std::string_view path,
146 std::vector<std::pair<std::string, std::string>> headers = {},
152struct WsFrameHeader {
156 std::uint64_t payload_len;
157 std::uint8_t mask_key[4];
159 std::size_t header_size;
166NEOGRAPH_API std::optional<WsFrameHeader> parse_frame_header(std::string_view buf);
170NEOGRAPH_API
void encode_frame_header(
175 std::uint64_t payload_len,
176 const std::uint8_t mask_key[4] =
nullptr);
179NEOGRAPH_API
void apply_mask(
char* data, std::size_t len,
const std::uint8_t mask_key[4])
noexcept;
183NEOGRAPH_API std::string generate_sec_websocket_key();
187NEOGRAPH_API std::string compute_sec_websocket_accept(std::string_view client_key);
NEOGRAPH_API export/import macro for shared-library builds.
asio::awaitable< void > send_close(std::uint16_t code=1000, std::string_view reason="")
Send a close frame with the given status code and optional UTF-8 reason.
asio::awaitable< void > send_binary(std::string_view payload)
Send a binary frame (FIN=1). Masked per §5.3.
asio::awaitable< WsMessage > recv()
Block until the next application message arrives.
asio::awaitable< void > send_text(std::string_view payload)
Send a text frame (FIN=1, no fragmentation).
friend NEOGRAPH_API asio::awaitable< std::unique_ptr< WsClient > > ws_connect(asio::any_io_executor, std::string_view, std::string_view, std::string_view, std::vector< std::pair< std::string, std::string > >, bool)
Establish a WebSocket connection.
NEOGRAPH_API asio::awaitable< std::unique_ptr< WsClient > > ws_connect(asio::any_io_executor ex, std::string_view host, std::string_view port, std::string_view path, std::vector< std::pair< std::string, std::string > > headers={}, bool tls=true)
Establish a WebSocket connection.