#ifndef __SETTINGS_H__ #define __SETTINGS_H__ #include "ApplicationSettings.h" #include "Singleton.h" #include "router.hpp" #include #include #include class HttpSession; class ChatRoom; class SystemUsage; class IoContext; namespace Nng { namespace Asio { class Socket; } } // namespace Nng 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(uint16_t, WtPort, 8082); BUILD_SETTING(uint32_t, Threads, std::thread::hardware_concurrency()); BUILD_SETTING(std::string, DocumentRoot, "."); BUILD_SETTING(std::string, HomeAssistantAccessToken, ""); BUILD_SETTING(std::string, Live2dModelsRoot, "./live2d"); 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; void insertUrl(std::string_view url, RequestHandler &&handler); static void requetExit(); protected: void alarmTask(); void startAcceptRequest(); 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; std::shared_ptr m_systemUsage; std::shared_ptr m_replyer; }; #endif // __SETTINGS_H__