#ifndef HTTP_SERVER4_SERVER_HPP
#define HTTP_SERVER4_SERVER_HPP
#include <boost/asio.hpp>
#include <array>
#include <functional>
#include <memory>
#include <string>
#include "request_parser.hpp"
namespace http {
namespace server4 {
struct request;
struct reply;
class server : boost::asio::coroutine
{
public:
explicit server(boost::asio::io_context& io_context,
const std::string& address, const std::string& port,
std::function<void(const request&, reply&)> request_handler);
void operator()(
boost::system::error_code ec = boost::system::error_code(),
std::size_t length = 0);
private:
typedef boost::asio::ip::tcp tcp;
std::function<void(const request&, reply&)> request_handler_;
std::shared_ptr<tcp::acceptor> acceptor_;
std::shared_ptr<tcp::socket> socket_;
std::shared_ptr<std::array<char, 8192>> buffer_;
std::shared_ptr<request> request_;
request_parser::result_type parse_result_;
request_parser request_parser_;
std::shared_ptr<reply> reply_;
};
} }
#endif