Распил listeners
This commit is contained in:
parent
315c72c0a6
commit
8b703364b1
@ -19,5 +19,7 @@ add_executable(application src/main.cpp
|
|||||||
src/helper.cpp
|
src/helper.cpp
|
||||||
src/sdk.h
|
src/sdk.h
|
||||||
src/Session.h
|
src/Session.h
|
||||||
src/Session.cpp)
|
src/Session.cpp
|
||||||
|
src/Listener.h
|
||||||
|
src/Listener.cpp)
|
||||||
target_link_libraries(application PRIVATE Threads::Threads)
|
target_link_libraries(application PRIVATE Threads::Threads)
|
76
src/Listener.cpp
Normal file
76
src/Listener.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
//
|
||||||
|
// Created by Антон on 11.11.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Listener.h"
|
||||||
|
|
||||||
|
namespace uad
|
||||||
|
{
|
||||||
|
listener::listener(boost::asio::io_context& ioc,
|
||||||
|
boost::asio::ip::tcp::endpoint endpoint,
|
||||||
|
const std::shared_ptr<const std::string>& doc_root)
|
||||||
|
: ioc_(ioc), acceptor_(net::make_strand(ioc)), doc_root_(doc_root)
|
||||||
|
{
|
||||||
|
beast::error_code ec;
|
||||||
|
|
||||||
|
acceptor_.open(endpoint.protocol(), ec);
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
uad::fail(ec, "open");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
acceptor_.set_option(net::socket_base::reuse_address(true), ec);
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
uad::fail(ec, "set_option");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
acceptor_.bind(endpoint, ec);
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
uad::fail(ec, "bind");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
acceptor_.listen(
|
||||||
|
net::socket_base::max_listen_connections, ec);
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
uad::fail(ec, "listen");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void listener::run()
|
||||||
|
{
|
||||||
|
do_accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void listener::do_accept()
|
||||||
|
{
|
||||||
|
acceptor_.async_accept(
|
||||||
|
net::make_strand(ioc_),
|
||||||
|
beast::bind_front_handler(
|
||||||
|
&listener::on_accept,
|
||||||
|
shared_from_this()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void listener::on_accept(beast::error_code ec, tcp::socket socket)
|
||||||
|
{
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
uad::fail(ec, "accept");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::make_shared<uad::session>(
|
||||||
|
std::move(socket),
|
||||||
|
doc_root_)->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
do_accept();
|
||||||
|
}
|
||||||
|
}
|
45
src/Listener.h
Normal file
45
src/Listener.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include <boost/beast/core.hpp>
|
||||||
|
#include <boost/beast/http.hpp>
|
||||||
|
#include <boost/beast/version.hpp>
|
||||||
|
#include <boost/asio/dispatch.hpp>
|
||||||
|
#include <boost/asio/strand.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <functional>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <thread>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "helpers.h"
|
||||||
|
#include "Session.h"
|
||||||
|
|
||||||
|
namespace uad
|
||||||
|
{
|
||||||
|
namespace beast = boost::beast;
|
||||||
|
namespace http = beast::http;
|
||||||
|
namespace net = boost::asio;
|
||||||
|
using tcp = boost::asio::ip::tcp;
|
||||||
|
|
||||||
|
class listener : public std::enable_shared_from_this<listener>
|
||||||
|
{
|
||||||
|
net::io_context& ioc_;
|
||||||
|
tcp::acceptor acceptor_;
|
||||||
|
std::shared_ptr<std::string const> doc_root_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
listener(
|
||||||
|
net::io_context& ioc,
|
||||||
|
tcp::endpoint endpoint,
|
||||||
|
std::shared_ptr<std::string const> const& doc_root);
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void do_accept();
|
||||||
|
|
||||||
|
void on_accept(beast::error_code ec, tcp::socket socket);
|
||||||
|
};
|
||||||
|
}
|
@ -37,7 +37,6 @@ class session : public std::enable_shared_from_this<session>
|
|||||||
beast::error_code ec,
|
beast::error_code ec,
|
||||||
std::size_t bytes_transferred);
|
std::size_t bytes_transferred);
|
||||||
|
|
||||||
|
|
||||||
void send_response(http::message_generator&& msg);
|
void send_response(http::message_generator&& msg);
|
||||||
|
|
||||||
void on_write(
|
void on_write(
|
||||||
|
83
src/main.cpp
83
src/main.cpp
@ -17,92 +17,13 @@
|
|||||||
|
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
#include "Session.h"
|
#include "Session.h"
|
||||||
|
#include "Listener.h"
|
||||||
|
|
||||||
namespace beast = boost::beast;
|
namespace beast = boost::beast;
|
||||||
namespace http = beast::http;
|
namespace http = beast::http;
|
||||||
namespace net = boost::asio;
|
namespace net = boost::asio;
|
||||||
using tcp = boost::asio::ip::tcp;
|
using tcp = boost::asio::ip::tcp;
|
||||||
|
using namespace uad;
|
||||||
class listener : public std::enable_shared_from_this<listener>
|
|
||||||
{
|
|
||||||
net::io_context& ioc_;
|
|
||||||
tcp::acceptor acceptor_;
|
|
||||||
std::shared_ptr<std::string const> doc_root_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
listener(
|
|
||||||
net::io_context& ioc,
|
|
||||||
tcp::endpoint endpoint,
|
|
||||||
std::shared_ptr<std::string const> const& doc_root)
|
|
||||||
: ioc_(ioc), acceptor_(net::make_strand(ioc)), doc_root_(doc_root)
|
|
||||||
{
|
|
||||||
beast::error_code ec;
|
|
||||||
|
|
||||||
acceptor_.open(endpoint.protocol(), ec);
|
|
||||||
if (ec)
|
|
||||||
{
|
|
||||||
uad::fail(ec, "open");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptor_.set_option(net::socket_base::reuse_address(true), ec);
|
|
||||||
if (ec)
|
|
||||||
{
|
|
||||||
uad::fail(ec, "set_option");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptor_.bind(endpoint, ec);
|
|
||||||
if (ec)
|
|
||||||
{
|
|
||||||
uad::fail(ec, "bind");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptor_.listen(
|
|
||||||
net::socket_base::max_listen_connections, ec);
|
|
||||||
if (ec)
|
|
||||||
{
|
|
||||||
uad::fail(ec, "listen");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
run()
|
|
||||||
{
|
|
||||||
do_accept();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void
|
|
||||||
do_accept()
|
|
||||||
{
|
|
||||||
acceptor_.async_accept(
|
|
||||||
net::make_strand(ioc_),
|
|
||||||
beast::bind_front_handler(
|
|
||||||
&listener::on_accept,
|
|
||||||
shared_from_this()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
on_accept(beast::error_code ec, tcp::socket socket)
|
|
||||||
{
|
|
||||||
if (ec)
|
|
||||||
{
|
|
||||||
uad::fail(ec, "accept");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::make_shared<uad::session>(
|
|
||||||
std::move(socket),
|
|
||||||
doc_root_)->run();
|
|
||||||
}
|
|
||||||
|
|
||||||
do_accept();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user