#pragma once #include #include #include "config.h" #include "plugin.h" #include "statistics.h" namespace ssl = boost::asio::ssl; // from using namespace std::string_literals; // Base class for HTTP and HTTPS classes class Server { protected: Config& m_config; boost::asio::io_context& m_ioc; const Socket& m_socket; plugins_container_type& m_plugins; Statistics& m_statistics; public: static const std::string VersionString; Server(Config& config, boost::asio::io_context& ioc, const Socket& socket, plugins_container_type& plugins, Statistics& statistics); virtual ~Server(); virtual int start() = 0; // Getters Config& GetConfig(); const Socket& GetSocket(); plugin_type GetPlugin(const std::string& name); Statistics& GetStatistics(); }; int run_server(Config& config, plugins_container_type& plugins);