roar
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
Roar::Client Class Reference

#include <client.hpp>

Collaboration diagram for Roar::Client:

Classes

struct  ConstructionArguments
 
struct  SslOptions
 

Public Member Functions

 Client (ConstructionArguments &&args)
 
 ROAR_PIMPL_SPECIAL_FUNCTIONS_NO_MOVE (Client)
 
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< std::size_t >, Detail::PromiseTypeBindFail< Error > > send (std::string message, std::chrono::seconds timeout=defaultTimeout)
 Sends a string to the server.
 
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< std::string_view, std::size_t >, Detail::PromiseTypeBindFail< Error > > read (std::chrono::seconds timeout=defaultTimeout)
 Reads something from the server.
 
template<typename T >
void attachState (std::string const &tag, T &&state)
 Attach some state to the client lifetime.
 
template<typename T , typename... ConstructionArgs>
void emplaceState (std::string const &tag, ConstructionArgs &&... args)
 Create state in place.
 
template<typename T >
T & state (std::string const &tag)
 Retrieve attached state by tag.
 
void removeState (std::string const &tag)
 Remove attached state.
 
template<typename BodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > request (Request< BodyT > &&request, std::chrono::seconds timeout=defaultTimeout)
 Connects the client to a server and performs a request.
 
template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > readHeader (boost::beast::http::response_parser< ResponseBodyT > &parser, std::chrono::seconds timeout=defaultTimeout)
 Reads only the header, will need be followed up by a readResponse.
 
template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< Detail::PromiseReferenceWrap< Response< ResponseBodyT > > >, Detail::PromiseTypeBindFail< Error > > readResponse (std::chrono::seconds timeout=defaultTimeout)
 Read a response from the server.
 
template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > readResponse (boost::beast::http::response_parser< ResponseBodyT > &parser, std::chrono::seconds timeout=defaultTimeout)
 Read a response using a beast response parser. You are responsible for keeping the parser alive!
 
template<typename ResponseBodyT , typename RequestBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< Detail::PromiseReferenceWrap< Response< ResponseBodyT > > >, Detail::PromiseTypeBindFail< Error > > requestAndReadResponse (Request< RequestBodyT > &&request, std::chrono::seconds timeout=defaultTimeout)
 
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > close ()
 
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > shutdownSsl (std::chrono::seconds timeout=defaultTimeout)
 
template<typename FunctionT >
void withStreamDo (FunctionT &&func)
 
template<typename FunctionT >
void withStreamDo (FunctionT &&func) const
 
template<typename FunctionT >
void withLowerLayerDo (FunctionT &&func)
 
template<typename FunctionT >
void withLowerLayerDo (FunctionT &&func) const
 

Static Public Attributes

static constexpr std::chrono::seconds defaultTimeout {10}
 

Private Member Functions

void doResolve (std::string const &host, std::string const &port, std::function< void(boost::beast::error_code ec, boost::asio::ip::tcp::resolver::results_type results)> onResolve)
 
template<typename BodyT >
void onConnect (Request< BodyT > &&request, promise::Defer &&d, std::chrono::seconds timeout)
 
template<typename BodyT >
void performRequest (Request< BodyT > &&request, promise::Defer &&d, std::chrono::seconds timeout)
 
std::optional< ErrorsetupSsl (std::string const &host)
 

Private Attributes

std::optional< SslOptionssslOptions_
 
boost::asio::ip::tcp::resolver resolver_
 
std::shared_ptr< boost::beast::flat_buffer > buffer_
 
std::variant< boost::beast::ssl_stream< boost::beast::tcp_stream >, boost::beast::tcp_stream > socket_
 
boost::asio::ip::tcp::resolver::results_type::endpoint_type endpoint_
 
std::unordered_map< std::string, std::any > attachedState_
 

Constructor & Destructor Documentation

◆ Client()

Roar::Client::Client ( ConstructionArguments &&  args)

Member Function Documentation

◆ attachState()

template<typename T >
void Roar::Client::attachState ( std::string const &  tag,
T &&  state 
)
inline

Attach some state to the client lifetime.

Parameters
tagA tag name, to retrieve it back with.
stateThe state.

◆ close()

◆ doResolve()

void Roar::Client::doResolve ( std::string const &  host,
std::string const &  port,
std::function< void(boost::beast::error_code ec, boost::asio::ip::tcp::resolver::results_type results)>  onResolve 
)
private

◆ emplaceState()

template<typename T , typename... ConstructionArgs>
void Roar::Client::emplaceState ( std::string const &  tag,
ConstructionArgs &&...  args 
)
inline

Create state in place.

Template Parameters
ConstructionArgs
Parameters
tag
args

◆ onConnect()

template<typename BodyT >
void Roar::Client::onConnect ( Request< BodyT > &&  request,
promise::Defer &&  d,
std::chrono::seconds  timeout 
)
inlineprivate

◆ performRequest()

template<typename BodyT >
void Roar::Client::performRequest ( Request< BodyT > &&  request,
promise::Defer &&  d,
std::chrono::seconds  timeout 
)
inlineprivate

◆ read()

Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< std::string_view, std::size_t >, Detail::PromiseTypeBindFail< Error > > Roar::Client::read ( std::chrono::seconds  timeout = defaultTimeout)

Reads something from the server.

Returns
A promise to continue after reading

◆ readHeader()

template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > Roar::Client::readHeader ( boost::beast::http::response_parser< ResponseBodyT > &  parser,
std::chrono::seconds  timeout = defaultTimeout 
)
inline

Reads only the header, will need be followed up by a readResponse.

Template Parameters
ResponseBodyT
Parameters
parser
timeout
Returns
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<Detail::PromiseReferenceWrap< Detail::PromiseReferenceWrap<boost::beast::http::response_parser<ResponseBodyT>>>>, Detail::PromiseTypeBindFail<Error>>

◆ readResponse() [1/2]

template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > Roar::Client::readResponse ( boost::beast::http::response_parser< ResponseBodyT > &  parser,
std::chrono::seconds  timeout = defaultTimeout 
)
inline

Read a response using a beast response parser. You are responsible for keeping the parser alive!

Template Parameters
ResponseBodyT
Parameters
parserPassed in by reference, must be alive until the promise is resolved.
timeout
Returns
Detail::PromiseTypeBind<Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail<Error const&>>

◆ readResponse() [2/2]

template<typename ResponseBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< Detail::PromiseReferenceWrap< Response< ResponseBodyT > > >, Detail::PromiseTypeBindFail< Error > > Roar::Client::readResponse ( std::chrono::seconds  timeout = defaultTimeout)
inline

Read a response from the server.

Template Parameters
ResponseBodyT
Parameters
timeout
Returns
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<Detail::PromiseReferenceWrap<Response<ResponseBodyT>>>, Detail::PromiseTypeBindFail<Error>> Returns either a Response<ResponseBodyT> or an Error.

◆ removeState()

void Roar::Client::removeState ( std::string const &  tag)
inline

Remove attached state.

Parameters
tagThe tag of the state to remove.

◆ request()

template<typename BodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > Roar::Client::request ( Request< BodyT > &&  request,
std::chrono::seconds  timeout = defaultTimeout 
)
inline

Connects the client to a server and performs a request.

Parameters
requestParameterssee RequestParameters
Returns
A promise to continue after the connect.

◆ requestAndReadResponse()

template<typename ResponseBodyT , typename RequestBodyT >
Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< Detail::PromiseReferenceWrap< Response< ResponseBodyT > > >, Detail::PromiseTypeBindFail< Error > > Roar::Client::requestAndReadResponse ( Request< RequestBodyT > &&  request,
std::chrono::seconds  timeout = defaultTimeout 
)
inline

◆ ROAR_PIMPL_SPECIAL_FUNCTIONS_NO_MOVE()

Roar::Client::ROAR_PIMPL_SPECIAL_FUNCTIONS_NO_MOVE ( Client  )

◆ send()

Detail::PromiseTypeBind< Detail::PromiseTypeBindThen< std::size_t >, Detail::PromiseTypeBindFail< Error > > Roar::Client::send ( std::string  message,
std::chrono::seconds  timeout = defaultTimeout 
)

Sends a string to the server.

Parameters
messageA message to send.
Returns
A promise that is called with the amount of bytes sent, Promise::fail with a Roar::Error.

◆ setupSsl()

std::optional< Error > Roar::Client::setupSsl ( std::string const &  host)
private

◆ shutdownSsl()

Detail::PromiseTypeBind< Detail::PromiseTypeBindThen<>, Detail::PromiseTypeBindFail< Error > > Roar::Client::shutdownSsl ( std::chrono::seconds  timeout = defaultTimeout)
inline

◆ state()

template<typename T >
T & Roar::Client::state ( std::string const &  tag)
inline

Retrieve attached state by tag.

Template Parameters
TType of the attached state.
Parameters
tagThe tag of the state.
Returns
T& Returns a reference to the held state.

◆ withLowerLayerDo() [1/2]

template<typename FunctionT >
void Roar::Client::withLowerLayerDo ( FunctionT &&  func)
inline

◆ withLowerLayerDo() [2/2]

template<typename FunctionT >
void Roar::Client::withLowerLayerDo ( FunctionT &&  func) const
inline

◆ withStreamDo() [1/2]

template<typename FunctionT >
void Roar::Client::withStreamDo ( FunctionT &&  func)
inline

◆ withStreamDo() [2/2]

template<typename FunctionT >
void Roar::Client::withStreamDo ( FunctionT &&  func) const
inline

Member Data Documentation

◆ attachedState_

std::unordered_map<std::string, std::any> Roar::Client::attachedState_
private

◆ buffer_

std::shared_ptr<boost::beast::flat_buffer> Roar::Client::buffer_
private

◆ defaultTimeout

constexpr std::chrono::seconds Roar::Client::defaultTimeout {10}
staticconstexpr

◆ endpoint_

boost::asio::ip::tcp::resolver::results_type::endpoint_type Roar::Client::endpoint_
private

◆ resolver_

boost::asio::ip::tcp::resolver Roar::Client::resolver_
private

◆ socket_

std::variant<boost::beast::ssl_stream<boost::beast::tcp_stream>, boost::beast::tcp_stream> Roar::Client::socket_
private

◆ sslOptions_

std::optional<SslOptions> Roar::Client::sslOptions_
private

The documentation for this class was generated from the following files: