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/logger.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, const addr_t& node_addr,
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();
40
41 protected:
42 std::shared_ptr<HttpProcessor> request_processor_;
43 std::shared_ptr<metrics::JsonRpcMetrics> metrics_;
44
45 private:
46 std::atomic<bool> stopped_ = true;
47 boost::asio::io_context& io_context_;
48 boost::asio::ip::tcp::acceptor acceptor_;
49 boost::asio::ip::tcp::endpoint ep_;
51};
52// QQ:
53// Why RpcConnection and Rpc use different io_context?
54// Rpc use a io_context to create acceptor
55// RpcConnection use the io_context from node to create socket
56
57// node and rpc use same io_context
58
59// QQ:
60// atomic_flag responded, is RpcConnection multithreaded??
61
62class HttpConnection : public std::enable_shared_from_this<HttpConnection> {
63 public:
64 explicit HttpConnection(const std::shared_ptr<HttpServer>& http_server);
66 boost::asio::ip::tcp::socket& getSocket() { return socket_; }
67 virtual std::shared_ptr<HttpConnection> getShared();
68 void read();
69 void stop();
70
71 protected:
72 std::shared_ptr<HttpServer> server_;
73 boost::asio::ip::tcp::socket socket_;
74 boost::beast::flat_buffer buffer_;
75 boost::beast::http::request<boost::beast::http::string_body> request_;
76 boost::beast::http::response<boost::beast::http::string_body> response_;
77};
78
79} // namespace taraxa::net
Definition FixedHash.h:35
Definition http_server.hpp:62
void stop()
Definition http_server.cpp:82
boost::asio::ip::tcp::socket & getSocket()
Definition http_server.hpp:66
virtual ~HttpConnection()
Definition http_server.hpp:65
void read()
Definition http_server.cpp:93
boost::asio::ip::tcp::socket socket_
Definition http_server.hpp:73
boost::beast::flat_buffer buffer_
Definition http_server.hpp:74
virtual std::shared_ptr< HttpConnection > getShared()
Definition http_server.cpp:70
std::shared_ptr< HttpServer > server_
Definition http_server.hpp:72
boost::beast::http::response< boost::beast::http::string_body > response_
Definition http_server.hpp:76
boost::beast::http::request< boost::beast::http::string_body > request_
Definition http_server.hpp:75
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:39
friend HttpConnection
Definition http_server.hpp:38
std::shared_ptr< HttpConnection > createConnection()
Definition http_server.cpp:22
boost::asio::ip::tcp::endpoint ep_
Definition http_server.hpp:49
bool start()
Definition http_server.cpp:24
std::shared_ptr< HttpProcessor > request_processor_
Definition http_server.hpp:42
bool stop()
Definition http_server.cpp:60
std::atomic< bool > stopped_
Definition http_server.hpp:46
boost::asio::ip::tcp::acceptor acceptor_
Definition http_server.hpp:48
std::shared_ptr< HttpServer > getShared()
Definition http_server.cpp:13
virtual ~HttpServer()
Definition http_server.hpp:29
void accept()
Definition http_server.cpp:44
boost::asio::io_context & io_context_
Definition http_server.hpp:47
std::shared_ptr< metrics::JsonRpcMetrics > metrics_
Definition http_server.hpp:43
boost::asio::io_context & getIoContext()
Definition http_server.hpp:35
#define LOG_OBJECTS_DEFINE
Definition logger.hpp:60
Definition http_processor.hpp:11