diff options
author | 2016-11-07 10:42:23 +0100 | |
---|---|---|
committer | 2016-11-07 10:42:23 +0100 | |
commit | fc58a0bec8bf779af3afecbc6ca59a7b9c9c0b67 (patch) | |
tree | 011e6d736c6e191f130c066a860e7fda9d0e0014 /src/lib/http/server.hpp | |
parent | ce0e6e6a3e114625e6b33a2ab75489a5b0cba17b (diff) |
Added basic HTTP server, not active yet, based on ASIO example with small refactoring included (nw)
Diffstat (limited to 'src/lib/http/server.hpp')
-rw-r--r-- | src/lib/http/server.hpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/lib/http/server.hpp b/src/lib/http/server.hpp new file mode 100644 index 00000000000..7c6483acfe3 --- /dev/null +++ b/src/lib/http/server.hpp @@ -0,0 +1,57 @@ +// license:Boost +// copyright-holders:Christopher M. Kohlhoff + +#ifndef HTTP_SERVER_HPP +#define HTTP_SERVER_HPP + +#include "asio.h" +#include <string> +#include "connection.hpp" +#include "connection_manager.hpp" +#include "request_handler.hpp" + +namespace http { +namespace 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, and + /// serve up files from the given directory. + explicit server(const std::string& address, const std::string& port, + const std::string& doc_root); + + /// 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. + asio::io_context m_io_context; + + /// The signal_set is used to register for process termination notifications. + asio::signal_set m_signals; + + /// Acceptor used to listen for incoming connections. + asio::ip::tcp::acceptor m_acceptor; + + /// The connection manager which owns all live connections. + connection_manager m_connection_manager; + + /// The handler for all incoming requests. + request_handler m_request_handler; +}; + +} // namespace server +} // namespace http + +#endif // HTTP_SERVER_HPP |