TARAXA
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"
9 
10 namespace taraxa::net {
11 
13  public:
14  using Request = boost::beast::http::request<boost::beast::http::string_body>;
15  using Response = boost::beast::http::response<boost::beast::http::string_body>;
16 
17  virtual Response process(const Request& request) = 0;
18 };
19 
20 class HttpConnection;
21 class HttpHandler;
22 
23 class HttpServer : public std::enable_shared_from_this<HttpServer> {
24  public:
25  HttpServer(boost::asio::io_context& io, boost::asio::ip::tcp::endpoint ep, const addr_t& node_addr,
26  const std::shared_ptr<HttpProcessor>& request_processor);
27 
28  virtual ~HttpServer() { HttpServer::stop(); }
29 
30  bool start();
31  bool stop();
32 
33  void accept();
34  boost::asio::io_context& getIoContext() { return io_context_; }
35  std::shared_ptr<HttpServer> getShared();
36  std::shared_ptr<HttpConnection> createConnection();
38  friend HttpHandler;
39 
40  protected:
41  std::shared_ptr<HttpProcessor> request_processor_;
42 
43  private:
44  std::atomic<bool> stopped_ = true;
45  boost::asio::io_context& io_context_;
46  boost::asio::ip::tcp::acceptor acceptor_;
47  boost::asio::ip::tcp::endpoint ep_;
49 };
50 // QQ:
51 // Why RpcConnection and Rpc use different io_context?
52 // Rpc use a io_context to create acceptor
53 // RpcConnection use the io_context from node to create socket
54 
55 // node and rpc use same io_context
56 
57 // QQ:
58 // atomic_flag responded, is RpcConnection multithreaded??
59 
60 class HttpConnection : public std::enable_shared_from_this<HttpConnection> {
61  public:
62  explicit HttpConnection(const std::shared_ptr<HttpServer>& http_server);
64  boost::asio::ip::tcp::socket& getSocket() { return socket_; }
65  virtual std::shared_ptr<HttpConnection> getShared();
66  void read();
67  void stop();
68 
69  protected:
70  std::shared_ptr<HttpServer> server_;
71  boost::asio::ip::tcp::socket socket_;
72  boost::beast::flat_buffer buffer_;
73  boost::beast::http::request<boost::beast::http::string_body> request_;
74  boost::beast::http::response<boost::beast::http::string_body> response_;
75 };
76 
77 } // namespace taraxa::net
Definition: FixedHash.h:35
Definition: http_server.hpp:60
void stop()
Definition: http_server.cpp:81
virtual ~HttpConnection()
Definition: http_server.hpp:63
HttpConnection(const std::shared_ptr< HttpServer > &http_server)
Definition: http_server.cpp:78
void read()
Definition: http_server.cpp:92
boost::asio::ip::tcp::socket & getSocket()
Definition: http_server.hpp:64
boost::asio::ip::tcp::socket socket_
Definition: http_server.hpp:71
boost::beast::flat_buffer buffer_
Definition: http_server.hpp:72
virtual std::shared_ptr< HttpConnection > getShared()
Definition: http_server.cpp:69
std::shared_ptr< HttpServer > server_
Definition: http_server.hpp:70
boost::beast::http::response< boost::beast::http::string_body > response_
Definition: http_server.hpp:74
boost::beast::http::request< boost::beast::http::string_body > request_
Definition: http_server.hpp:73
Definition: http_server.hpp:12
virtual Response process(const Request &request)=0
boost::beast::http::request< boost::beast::http::string_body > Request
Definition: http_server.hpp:14
boost::beast::http::response< boost::beast::http::string_body > Response
Definition: http_server.hpp:15
Definition: http_server.hpp:23
friend HttpHandler
Definition: http_server.hpp:38
friend HttpConnection
Definition: http_server.hpp:37
std::shared_ptr< HttpConnection > createConnection()
Definition: http_server.cpp:21
boost::asio::ip::tcp::endpoint ep_
Definition: http_server.hpp:47
bool start()
Definition: http_server.cpp:23
std::shared_ptr< HttpProcessor > request_processor_
Definition: http_server.hpp:41
bool stop()
Definition: http_server.cpp:59
std::atomic< bool > stopped_
Definition: http_server.hpp:44
HttpServer(boost::asio::io_context &io, boost::asio::ip::tcp::endpoint ep, const addr_t &node_addr, const std::shared_ptr< HttpProcessor > &request_processor)
Definition: http_server.cpp:5
boost::asio::ip::tcp::acceptor acceptor_
Definition: http_server.hpp:46
std::shared_ptr< HttpServer > getShared()
Definition: http_server.cpp:12
virtual ~HttpServer()
Definition: http_server.hpp:28
void accept()
Definition: http_server.cpp:43
boost::asio::io_context & io_context_
Definition: http_server.hpp:45
boost::asio::io_context & getIoContext()
Definition: http_server.hpp:34
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
Definition: http_processor.hpp:11