2025-03-07 22:15:36 +01:00

76 lines
1.6 KiB
C++

#ifndef seafire__server__hxx_
#define seafire__server__hxx_
#include <seafire/server/common-error.hxx>
#include <seafire/server/configuration.hxx>
#include <seafire/server/counter.hxx>
#include <seafire/server/request-handler.hxx>
#include <seafire/server/supervisor.hxx>
#include <seafire/common/diagnostics.hxx>
#include <seafire/common/io/acceptor.hxx>
namespace seafire::server
{
class request_t;
class response_t;
class transaction_t;
class server_t
: public error_handler_t
{
public:
/// Acceptor set type.
///
using acceptor_set_t = std::set<std::unique_ptr<common::io::acceptor_t>>;
server_t(common::diagnostics_t&,
configuration_t,
acceptor_set_t,
request_handler_t);
server_t(server_t const&) = delete;
server_t(server_t&&) = delete;
void
start();
void
stop(bool = false);
server_t& operator=(server_t const&) = delete;
server_t& operator=(server_t&&) = delete;
protected:
void
on_error(request_t&, response_t&, common_error_t) override;
void
on_exception(request_t&, response_t&) noexcept override;
// fixme: void shutdown_stream();
private:
common::diagnostics_t::proxy_t
trace();
void
init_accept(common::io::acceptor_t&);
void
on_accept(common::io::acceptor_t&, std::error_code const&);
common::diagnostics_t& diagnostics_;
configuration_t configuration_;
acceptor_set_t const acceptors_;
request_handler_t handler_;
supervisor_t supervisor_;
};
} // namespace seafire::server
#endif