TARAXA
Loading...
Searching...
No Matches
http_server.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <boost/asio.hpp>
5#include <boost/beast.hpp>
6
7#include "common/types.hpp"
8#include "logger/logging.hpp"
10
11namespace taraxa::net {
12
14 public:
15 using Request = boost::beast::http::request<boost::beast::http::string_body>;
16 using Response = boost::beast::http::response<boost::beast::http::string_body>;
17
18 virtual Response process(const Request& request) = 0;
19};
20
21class HttpConnection;
22class HttpHandler;
23
24class HttpServer : public std::enable_shared_from_this<HttpServer> {
25 public:
26 HttpServer(boost::asio::io_context& io, boost::asio::ip::tcp::endpoint ep,
27 const std::shared_ptr<HttpProcessor>& request_processor, std::shared_ptr<metrics::JsonRpcMetrics> metrics);
28
30
31 bool start();
32 bool stop();
33
34 void accept();
35 boost::asio::io_context& getIoContext() { return io_context_; }
36 std::shared_ptr<HttpServer> getShared();
37 std::shared_ptr<HttpConnection> createConnection();
41
42 protected:
43 std::shared_ptr<HttpProcessor> request_processor_;
44 std::shared_ptr<metrics::JsonRpcMetrics> metrics_;
45
46 private:
47 std::atomic<bool> stopped_ = true;
48 boost::asio::io_context& io_context_;
49 boost::asio::ip::tcp::acceptor acceptor_;
50 boost::asio::ip::tcp::endpoint ep_;
52};
53// QQ:
54// Why RpcConnection and Rpc use different io_context?
55// Rpc use a io_context to create acceptor
56// RpcConnection use the io_context from node to create socket
57
58// node and rpc use same io_context
59
60// QQ:
61// atomic_flag responded, is RpcConnection multithreaded??
62
63class HttpConnection : public std::enable_shared_from_this<HttpConnection> {
64 public:
65 explicit HttpConnection(const std::shared_ptr<HttpServer>& http_server);
67 boost::asio::ip::tcp::socket& getSocket() { return socket_; }
68 virtual std::shared_ptr<HttpConnection> getShared();
69 void read();
70 void stop();
71
72 protected:
73 std::shared_ptr<HttpServer> server_;
74 boost::asio::ip::tcp::socket socket_;
75 boost::beast::flat_buffer buffer_;
76 boost::beast::http::request<boost::beast::http::string_body> request_;
77 boost::beast::http::response<boost::beast::http::string_body> response_;
78};
79
80} // namespace taraxa::net
Definition http_server.hpp:63
void stop()
Definition http_server.cpp:90
boost::asio::ip::tcp::socket & getSocket()
Definition http_server.hpp:67
virtual ~HttpConnection()
Definition http_server.hpp:66
void read()
Definition http_server.cpp:101
boost::asio::ip::tcp::socket socket_
Definition http_server.hpp:74
boost::beast::flat_buffer buffer_
Definition http_server.hpp:75
virtual std::shared_ptr< HttpConnection > getShared()
Definition http_server.cpp:78
std::shared_ptr< HttpServer > server_
Definition http_server.hpp:73
boost::beast::http::response< boost::beast::http::string_body > response_
Definition http_server.hpp:77
boost::beast::http::request< boost::beast::http::string_body > request_
Definition http_server.hpp:76
Definition http_server.hpp:13
virtual Response process(const Request &request)=0
boost::beast::http::request< boost::beast::http::string_body > Request
Definition http_server.hpp:15
boost::beast::http::response< boost::beast::http::string_body > Response
Definition http_server.hpp:16
Definition http_server.hpp:24
friend HttpHandler
Definition http_server.hpp:40
friend HttpConnection
Definition http_server.hpp:39
std::shared_ptr< HttpConnection > createConnection()
Definition http_server.cpp:28
logger::Logger getLogger() const
Definition http_server.cpp:30
boost::asio::ip::tcp::endpoint ep_
Definition http_server.hpp:50
bool start()
Definition http_server.cpp:32
std::shared_ptr< HttpProcessor > request_processor_
Definition http_server.hpp:43
bool stop()
Definition http_server.cpp:68
std::atomic< bool > stopped_
Definition http_server.hpp:47
logger::Logger logger_
Definition http_server.hpp:51
boost::asio::ip::tcp::acceptor acceptor_
Definition http_server.hpp:49
std::shared_ptr< HttpServer > getShared()
Definition http_server.cpp:19
virtual ~HttpServer()
Definition http_server.hpp:29
void accept()
Definition http_server.cpp:52
boost::asio::io_context & io_context_
Definition http_server.hpp:48
std::shared_ptr< metrics::JsonRpcMetrics > metrics_
Definition http_server.hpp:44
boost::asio::io_context & getIoContext()
Definition http_server.hpp:35
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
Definition http_processor.hpp:11