//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include "request/request.h" #include "response/response.h" #include "router.h" #include "session.h" #include "database/pool.h" #include "utils/helpers.h" #include "config.h" #include "taskmanager/manager.h" #include "taskmanager/scheduler.h" class Server : public std::enable_shared_from_this { public: Server(); ~Server(); void run(int socketDescriptor); unsigned int registerAccount(const std::string& login, const std::string& password); bool validatePassword(const std::string& login, const std::string& password); Session& openSession(const std::string& login); Session& getSession(const std::string& accessToken); private: void handleRequest(std::unique_ptr request); static std::string generateRandomString(std::size_t length); private: using Sessions = std::map>; bool terminating; uint64_t requestCount; std::optional serverName; std::shared_ptr router; std::shared_ptr pool; std::shared_ptr taskManager; std::shared_ptr scheduler; Sessions sessions; };