22#include "util/log/Logger.hpp"
23#include "util/requests/Types.hpp"
25#include <boost/asio/bind_cancellation_slot.hpp>
26#include <boost/asio/cancellation_signal.hpp>
27#include <boost/asio/cancellation_type.hpp>
28#include <boost/asio/io_context.hpp>
29#include <boost/asio/spawn.hpp>
30#include <boost/beast/core/tcp_stream.hpp>
31#include <boost/beast/websocket/stream.hpp>
41namespace util::requests {
59 virtual std::expected<std::string, RequestError>
61 boost::asio::yield_context yield,
62 std::optional<std::chrono::steady_clock::duration> timeout = std::nullopt
73 virtual std::optional<RequestError>
75 std::string
const& message,
76 boost::asio::yield_context yield,
77 std::optional<std::chrono::steady_clock::duration> timeout = std::nullopt
87 virtual std::optional<RequestError>
92using WsConnectionPtr = std::unique_ptr<WsConnection>;
101 std::vector<HttpHeader> headers_;
104 std::string target_{
"/"};
166 std::expected<WsConnectionPtr, RequestError>
167 sslConnect(boost::asio::yield_context yield)
const;
175 std::expected<WsConnectionPtr, RequestError>
184 std::expected<WsConnectionPtr, RequestError>
185 connect(boost::asio::yield_context yield)
const;
190 template <
typename StreamDataType>
191 std::expected<WsConnectionPtr, RequestError>
192 connectImpl(StreamDataType&& streamData, boost::asio::yield_context yield)
const;
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:110
Builder for WebSocket connections.
Definition WsConnection.hpp:97
std::expected< WsConnectionPtr, RequestError > connect(boost::asio::yield_context yield) const
Connect to the host trying SSL first then plain if SSL fails.
Definition WsConnection.cpp:120
std::expected< WsConnectionPtr, RequestError > plainConnect(boost::asio::yield_context yield) const
Connect to the host without SSL asynchronously.
Definition WsConnection.cpp:114
WsConnectionBuilder(std::string host, std::string port)
Create a new connection builder.
Definition WsConnection.cpp:55
static constexpr std::chrono::seconds kDEFAULT_TIMEOUT
Definition WsConnection.hpp:187
WsConnectionBuilder & setConnectionTimeout(std::chrono::steady_clock::duration timeout)
Set the timeout for connection establishing operations. Default is 5 seconds.
Definition WsConnection.cpp:82
WsConnectionBuilder & setTarget(std::string target)
Set the target of the request.
Definition WsConnection.cpp:75
WsConnectionBuilder & addHeader(HttpHeader header)
Add a header to the request.
Definition WsConnection.cpp:61
std::expected< WsConnectionPtr, RequestError > sslConnect(boost::asio::yield_context yield) const
Connect to the host using SSL asynchronously.
Definition WsConnection.cpp:96
WsConnectionBuilder & setWsHandshakeTimeout(std::chrono::steady_clock::duration timeout)
Set the timeout for WebSocket handshake. Default is 5 seconds.
Definition WsConnection.cpp:89
WsConnectionBuilder & addHeaders(std::vector< HttpHeader > headers)
Add multiple headers to the request.
Definition WsConnection.cpp:68
Interface for WebSocket connections. It is used to hide SSL and plain connections behind the same int...
Definition WsConnection.hpp:48
static constexpr std::chrono::seconds kDEFAULT_TIMEOUT
Definition WsConnection.hpp:90
virtual std::optional< RequestError > close(boost::asio::yield_context yield, std::chrono::steady_clock::duration timeout=kDEFAULT_TIMEOUT)=0
Close the WebSocket.
virtual std::optional< RequestError > write(std::string const &message, boost::asio::yield_context yield, std::optional< std::chrono::steady_clock::duration > timeout=std::nullopt)=0
Write a message to the WebSocket.
virtual std::expected< std::string, RequestError > read(boost::asio::yield_context yield, std::optional< std::chrono::steady_clock::duration > timeout=std::nullopt)=0
Read a message from the WebSocket.