#ifndef __SETTINGS_H__ #define __SETTINGS_H__ #include "ApplicationSettings.h" #include "Singleton.h" #include "router.hpp" #include #include #include class HttpSession; class ChatRoom; class IoContext; class Application : public ApplicationSettings, public std::enable_shared_from_this { public: using Pointer = std::shared_ptr; using Request = boost::beast::http::request; using RequestHandler = std::function; BUILD_SETTING(std::string, Server, "0.0.0.0"); BUILD_SETTING(uint16_t, Port, 8081); BUILD_SETTING(uint32_t, Threads, std::thread::hardware_concurrency()); BUILD_SETTING(std::string, DocumentRoot, "."); INITIALIZE_FIELDS(Server, Port, Threads, DocumentRoot); Application(const std::string &path); boost::asio::io_context &ioContext(); int exec(); const RequestHandler *find(boost::urls::segments_encoded_view path, boost::urls::matches_base &matches) const noexcept; protected: void alarmTask(); private: int m_status = 0; std::shared_ptr m_ioContext; std::shared_ptr> m_router; std::shared_ptr m_timer; std::shared_ptr m_charRoom; }; #endif // __SETTINGS_H__