rcpp_framework/libs/brynet/net/wrapper/HttpConnectionBuilder.hpp

78 lines
1.9 KiB
C++
Raw Normal View History

2020-11-24 15:41:18 +01:00
#pragma once
#include <brynet/net/http/HttpService.hpp>
#include <brynet/net/wrapper/ConnectionBuilder.hpp>
2021-04-30 16:10:14 +02:00
#include <utility>
2020-11-24 15:41:18 +01:00
2021-05-14 17:16:45 +02:00
class HttpConnectionBuilder {
2021-04-30 16:10:14 +02:00
public:
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithService(TcpService::Ptr service) {
mBuilder.WithService(std::move(service));
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithConnector(AsyncConnector::Ptr connector) {
mBuilder.WithConnector(std::move(connector));
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithAddr(std::string ip, size_t port) {
mBuilder.WithAddr(std::move(ip), port);
return *this;
}
2020-11-24 15:41:18 +01:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithTimeout(std::chrono::nanoseconds timeout) {
mBuilder.WithTimeout(timeout);
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &AddSocketProcessCallback(const ProcessTcpSocketCallback &callback) {
mBuilder.AddSocketProcessCallback(callback);
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:49:39 +02:00
HttpConnectionBuilder &WithEnterCallback(HttpSession::EnterCallback &&callback) {
2021-05-14 17:16:45 +02:00
mHttpEnterCallback = std::move(callback);
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithFailedCallback(FailedCallback callback) {
mBuilder.WithFailedCallback(std::move(callback));
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithMaxRecvBufferSize(size_t size) {
mBuilder.WithMaxRecvBufferSize(size);
return *this;
}
2021-04-30 16:10:14 +02:00
#ifdef BRYNET_USE_OPENSSL
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithSSL() {
mBuilder.WithSSL();
return *this;
}
2021-04-30 16:10:14 +02:00
#endif
2021-05-14 17:16:45 +02:00
HttpConnectionBuilder &WithForceSameThreadLoop() {
mBuilder.WithForceSameThreadLoop();
return *this;
}
2021-04-30 16:10:14 +02:00
2021-05-14 17:16:45 +02:00
void asyncConnect() {
if (mHttpEnterCallback == nullptr) {
throw BrynetCommonException("not setting http enter callback");
}
2020-11-24 15:41:18 +01:00
2021-05-14 17:16:45 +02:00
auto callback = mHttpEnterCallback;
auto builder = mBuilder;
builder.AddEnterCallback([callback](const TcpConnection::Ptr &session) {
2021-05-14 17:49:39 +02:00
HttpService::setup(session, callback);
2021-05-14 17:16:45 +02:00
});
builder.asyncConnect();
}
2021-04-30 16:10:14 +02:00
private:
2021-05-14 17:49:39 +02:00
HttpSession::EnterCallback mHttpEnterCallback;
2021-05-14 17:16:45 +02:00
ConnectionBuilder mBuilder;
2021-04-30 16:10:14 +02:00
};
2020-11-24 15:41:18 +01:00