src/api/transport/impl/http/http_session.hpp¶
Namespaces¶
| Name |
|---|
| sgns |
| sgns::api |
Classes¶
| Name | |
|---|---|
| class | sgns::api::HttpSession HTTP session for api service. |
| struct | sgns::api::HttpSession::Configuration |
Source code¶
#ifndef SUPERGENIUS_SRC_API_TRANSPORT_BEAST_HTTP_SESSION_HPP
#define SUPERGENIUS_SRC_API_TRANSPORT_BEAST_HTTP_SESSION_HPP
#include <boost/asio/strand.hpp>
#include <boost/beast.hpp>
#include <chrono>
#include <cstdlib>
#include <memory>
#include "api/transport/session.hpp"
#include "base/logger.hpp"
namespace sgns::api {
class HttpSession : public Session,
public std::enable_shared_from_this<HttpSession> {
template <typename Body>
using Request = boost::beast::http::request<Body>;
template <typename Body>
using Response = boost::beast::http::response<Body>;
using StringBody = boost::beast::http::string_body;
template <class Body>
using RequestParser = boost::beast::http::request_parser<Body>;
using HttpField = boost::beast::http::field;
using HttpError = boost::beast::http::error;
public:
struct Configuration {
static constexpr size_t kDefaultRequestSize = 10000u;
static constexpr Duration kDefaultTimeout = std::chrono::seconds(30);
size_t max_request_size{kDefaultRequestSize};
Duration operation_timeout{kDefaultTimeout};
};
~HttpSession() override = default;
HttpSession(Context &context, Configuration config);
Socket &socket() override {
return stream_.socket();
}
void start() override;
void respond(std::string_view response) override;
SessionId id() const override {
return 0ull;
}
SessionType type() const override {
return SessionType::kHttp;
}
private:
void stop();
template <class Body>
void handleRequest(Request<Body> &&request);
void asyncRead();
template <class Message>
void asyncWrite(Message &&message);
void onRead(boost::system::error_code ec, std::size_t size);
void onWrite(boost::system::error_code ec, std::size_t, bool close);
static auto makeBadResponse( std::string_view message, unsigned version, bool keep_alive );
void reportError(boost::system::error_code ec, std::string_view message);
static constexpr boost::beast::string_view kServerName = "SuperGenius";
boost::asio::strand<boost::asio::io_context::executor_type> strand_;
Configuration config_;
boost::beast::tcp_stream stream_;
boost::beast::flat_buffer buffer_;
using Parser = RequestParser<StringBody>;
std::unique_ptr<Parser> parser_;
base::Logger logger_ = base::createLogger("http session");
};
} // namespace sgns::api
#endif // SUPERGENIUS_SRC_API_TRANSPORT_BEAST_HTTP_SESSION_HPP
Updated on 2026-03-04 at 13:10:44 -0800