3#include "util/log/Logger.hpp"
4#include "util/requests/Types.hpp"
6#include <boost/asio/bind_cancellation_slot.hpp>
7#include <boost/asio/cancellation_signal.hpp>
8#include <boost/asio/cancellation_type.hpp>
9#include <boost/asio/io_context.hpp>
10#include <boost/asio/spawn.hpp>
11#include <boost/beast/core/tcp_stream.hpp>
12#include <boost/beast/websocket/stream.hpp>
22namespace util::requests {
41 virtual std::expected<std::string, RequestError>
43 boost::asio::yield_context yield,
44 std::optional<std::chrono::steady_clock::duration> timeout = std::nullopt
55 virtual std::optional<RequestError>
57 std::string
const& message,
58 boost::asio::yield_context yield,
59 std::optional<std::chrono::steady_clock::duration> timeout = std::nullopt
69 virtual std::optional<RequestError>
71 boost::asio::yield_context yield,
79using WsConnectionPtr = std::unique_ptr<WsConnection>;
88 std::vector<HttpHeader> headers_;
91 std::string target_{
"/"};
153 std::expected<WsConnectionPtr, RequestError>
154 sslConnect(boost::asio::yield_context yield)
const;
162 std::expected<WsConnectionPtr, RequestError>
171 std::expected<WsConnectionPtr, RequestError>
172 connect(boost::asio::yield_context yield)
const;
179 template <
typename StreamDataType>
180 std::expected<WsConnectionPtr, RequestError>
181 connectImpl(StreamDataType&& streamData, boost::asio::yield_context yield)
const;
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:77
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:106
std::expected< WsConnectionPtr, RequestError > plainConnect(boost::asio::yield_context yield) const
Connect to the host without SSL asynchronously.
Definition WsConnection.cpp:100
WsConnectionBuilder(std::string host, std::string port)
Create a new connection builder.
Definition WsConnection.cpp:35
static constexpr std::chrono::seconds kDEFAULT_TIMEOUT
Definition WsConnection.hpp:174
WsConnectionBuilder & setConnectionTimeout(std::chrono::steady_clock::duration timeout)
Set the timeout for connection establishing operations. Default is 5 seconds.
Definition WsConnection.cpp:66
WsConnectionBuilder & setTarget(std::string target)
Set the target of the request.
Definition WsConnection.cpp:59
WsConnectionBuilder & addHeader(HttpHeader header)
Add a header to the request.
Definition WsConnection.cpp:41
std::expected< WsConnectionPtr, RequestError > sslConnect(boost::asio::yield_context yield) const
Connect to the host using SSL asynchronously.
Definition WsConnection.cpp:80
WsConnectionBuilder & setWsHandshakeTimeout(std::chrono::steady_clock::duration timeout)
Set the timeout for WebSocket handshake. Default is 5 seconds.
Definition WsConnection.cpp:73
WsConnectionBuilder & addHeaders(std::vector< HttpHeader > headers)
Add multiple headers to the request.
Definition WsConnection.cpp:48
Interface for WebSocket connections. It is used to hide SSL and plain connections behind the same int...
Definition WsConnection.hpp:30
static constexpr std::chrono::seconds kDEFAULT_TIMEOUT
Definition WsConnection.hpp:75
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.