#ifndef HTTP_SERVER_HPP #define HTTP_SERVER_HPP #include #include #include "connection_manager.hpp" #include "resource.h" namespace http::server { /// The top-level class of the HTTP server. class server { public: server(const server &) = delete; server &operator=(const server &) = delete; /// Construct the server to listen on the specified TCP address and port explicit server(const std::string &address, const std::string &port); std::vector> resources; /// Run the server's io_context loop. void run(); private: /// Perform an asynchronous accept operation. void do_accept(); /// Wait for a request to stop the server. void do_await_stop(); /// The io_context used to perform asynchronous operations. boost::asio::io_context io_context_; /// The signal_set is used to register for process termination notifications. boost::asio::signal_set signals_; /// Acceptor used to listen for incoming connections. boost::asio::ip::tcp::acceptor acceptor_; /// The connection manager which owns all live connections. connection_manager connection_manager_; /// Handle a request and produce a reply. void handle_request(const request &req, reply &rep); }; } // namespace http::server #endif // HTTP_SERVER_HPP