21#ifdef __cpp_impl_coroutine
27#include <trantor/net/EventLoop.h>
32using WebSocketClientPtr = std::shared_ptr<WebSocketClient>;
33using WebSocketRequestCallback = std::function<
34 void(ReqResult,
const HttpResponsePtr &,
const WebSocketClientPtr &)>;
36#ifdef __cpp_impl_coroutine
39struct [[nodiscard]] WebSocketConnectionAwaiter
40 :
public CallbackAwaiter<HttpResponsePtr>
42 WebSocketConnectionAwaiter(WebSocketClient *client, HttpRequestPtr req)
43 : client_(client), req_(std::move(req))
47 void await_suspend(std::coroutine_handle<> handle);
50 WebSocketClient *client_;
74 const std::function<
void(std::string &&message,
75 const WebSocketClientPtr &,
76 const WebSocketMessageType &)> &callback) = 0;
87 const std::function<
void(
const WebSocketClientPtr &)> &callback) = 0;
91 const WebSocketRequestCallback &callback) = 0;
102 const std::string &key) = 0;
115 const std::vector<std::pair<std::string, std::string>>
118#ifdef __cpp_impl_coroutine
125 void setAsyncMessageHandler(
126 const std::function<
Task<>(std::string &&message,
127 const WebSocketClientPtr &,
128 const WebSocketMessageType &)> &callback)
131 const WebSocketClientPtr &client,
132 const WebSocketMessageType &type) ->
void {
133 [callback](std::string &&message,
134 const WebSocketClientPtr client,
135 const WebSocketMessageType type) ->
AsyncTask {
136 co_await callback(std::move(message), client, type);
137 }(std::move(message), client, type);
150 void setAsyncConnectionClosedHandler(
151 const std::function<
Task<>(
const WebSocketClientPtr &)> &callback)
153 setConnectionClosedHandler(
154 [callback](
const WebSocketClientPtr &client) {
155 [=]() ->
AsyncTask {
co_await callback(client); }();
160 internal::WebSocketConnectionAwaiter connectToServerCoro(
161 const HttpRequestPtr &request)
163 return internal::WebSocketConnectionAwaiter(
this, request);
193 const std::string &ip,
196 trantor::EventLoop *loop =
nullptr,
197 bool useOldTLS =
false,
198 bool validateCert =
true);
225 const std::string &hostString,
226 trantor::EventLoop *loop =
nullptr,
227 bool useOldTLS =
false,
228 bool validateCert =
true);
233#ifdef __cpp_impl_coroutine
234inline void internal::WebSocketConnectionAwaiter::await_suspend(
235 std::coroutine_handle<> handle)
238 [
this, handle](ReqResult result,
239 const HttpResponsePtr &resp,
240 const WebSocketClientPtr &) {
241 if (result == ReqResult::Ok)
246 if (result == ReqResult::BadResponse)
247 reason =
"BadResponse";
249 ReqResult::NetworkFailure)
250 reason =
"NetworkFailure";
252 ReqResult::BadServerAddress)
253 reason =
"BadServerAddress";
254 else if (result == ReqResult::Timeout)
256 setException(std::make_exception_ptr(
257 std::runtime_error(reason)));
WebSocket client abstract class.
Definition WebSocketClient.h:62
static WebSocketClientPtr newWebSocketClient(const std::string &hostString, trantor::EventLoop *loop=nullptr, bool useOldTLS=false, bool validateCert=true)
static WebSocketClientPtr newWebSocketClient(const std::string &ip, uint16_t port, bool useSSL=false, trantor::EventLoop *loop=nullptr, bool useOldTLS=false, bool validateCert=true)
Create a websocket client using the given ip and port to connect to server.
virtual WebSocketConnectionPtr getConnection()=0
Get the WebSocket connection that is typically used to send messages.
virtual void setMessageHandler(const std::function< void(std::string &&message, const WebSocketClientPtr &, const WebSocketMessageType &)> &callback)=0
Set messages handler. When a message is received from the server, the callback is called.
virtual void stop()=0
Stop trying to connect to the server or close the connection.
virtual void addSSLConfigs(const std::vector< std::pair< std::string, std::string > > &sslConfCmds)=0
Supplies command style options for SSL_CONF_cmd.
virtual trantor::EventLoop * getLoop()=0
Get the event loop of the client;.
virtual void setConnectionClosedHandler(const std::function< void(const WebSocketClientPtr &)> &callback)=0
Set the connection closing handler. When the websocket connection is closed, the callback is called.
virtual void connectToServer(const HttpRequestPtr &request, const WebSocketRequestCallback &callback)=0
Connect to the server.
virtual void setCertPath(const std::string &cert, const std::string &key)=0
Set the client certificate used by the HTTP connection.
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23
Definition coroutine.h:355
Definition coroutine.h:161