как заставить сервер работать циклически С ++/boost
Я пытаюсь написать свой сервер REST API с использованием библиотеки boost, моя проблема в том, что я не понимаю, как заставить сервер работать циклически и не переставать работать после подключения одного пользователя, я уже перепробовал несколько способов, но не смог это реализовать
using namespace boost::asio;
namespace beast = boost::beast;
namespace http = beast::http;
using tcp = boost::asio::ip::tcp;
Server::Server(boost::asio::io_service& io_service, int port)
: acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),
port)),
socket_(io_service) {
StartAccept();
}
void Server::StartAccept() {
acceptor_.async_accept(socket_, [this](boost::system::error_code ec) {
if (!ec) {
std::cout << "Client connected" << std::endl;
}
else {
std::cerr << "Client error: " << ec.message() << std::endl;
}
});
}
void Server::ReadRequest() {
beast::http::async_read(socket_, buffer_, request_,
[this](boost::system::error_code ec, size_t bytes_transferred) {
if (!ec) {
ProcessRequest();
}
else {
std::cerr << "Error ReadRequest: " << ec.message() << std::endl;
}
});
}
void Server::ProcessRequest(){
if (request_.method() == http::verb::get) {
http::response<http::string_body> response(http::status::ok, request_.version());
response.set(http::field::server, "Boost Beast Server");
response.set(http::field::content_type, "text/plain");
response.keep_alive(request_.keep_alive());
response.body() = "Hello, World";
response.prepare_payload();
WriteResponse(response);
}
else {
http::response<http::string_body> response(http::status::bad_request, request_.version());
response.set(http::field::server, "Boost Beast Server");
response.set(http::field::content_type, "text/plain");
response.keep_alive(request_.keep_alive());
response.body() = "Invalide request!";
response.prepare_payload();
WriteResponse(response);
}
}
void
Server::WriteResponse(boost::beast::http::response<boost::beast::http::string_body>&
response_){
http::async_write(socket_, response_,
[this](boost::system::error_code ec, size_t byte) {
socket_.shutdown(tcp::socket::shutdown_send, ec);
if (ec) {
std::cerr << "Error WriteResponse: " << ec.message() << std::endl;
}
});
}