#pragma once #include #include #include "VirtualServerManager.h" #include #include #include "manager/SqlDataManager.h" #include "lincense/TeamSpeakLicense.h" #include "server/WebIoManager.h" #include namespace ts { namespace weblist { class WebListManager; } namespace permission { class PermissionNameMapper; } namespace server { namespace license { class LicenseService; } namespace file { class FileServerHandler; } namespace log { class ActionLogger; } class ServerCommandExecutor; class InstanceHandler { public: explicit InstanceHandler(SqlDataManager*); ~InstanceHandler(); bool startInstance(); void stopInstance(); ts::Properties& properties(){ return *_properties; } std::shared_ptr getInitialServerAdmin(){ return globalServerAdmin; } std::shared_ptr getGroupManager(){ return groupManager; } std::shared_ptr getChannelTree() { return this->default_tree; } std::shared_mutex& getChannelTreeLock() { return this->default_tree_lock; } VirtualServerManager* getVoiceServerManager(){ return this->voiceServerManager; } QueryServer* getQueryServer(){ return queryServer; } DatabaseHelper* databaseHelper(){ return this->dbHelper; } BanManager* banManager(){ return this->banMgr; } ssl::SSLManager* sslManager(){ return this->sslMgr; } sql::SqlManager* getSql(){ return sql->sql(); } log::ActionLogger* action_logger() { return &*this->action_logger_; } file::FileServerHandler* getFileServerHandler() { return this->file_server_handler_; } std::chrono::time_point getStartTimestamp(){ return startTimestamp; } void executeTick(VirtualServer*); void cancelExecute(VirtualServer*); bool reloadConfig(std::vector& /* errors */, bool /* reload file */); void setWebCertRoot(const std::string& /* key */, const std::string& /* certificate */, const std::string& /* revision */); const std::shared_ptr& musicRoot() { return this->_musicRoot; } std::chrono::milliseconds calculateSpokenTime(); void resetSpeechTime(); bool resetMonthlyStats(); [[nodiscard]] inline const auto& general_task_executor(){ return this->general_task_executor_; } std::shared_ptr getStatistics(){ return statistics; } std::shared_ptr scheduler(){ return this->tick_manager; } std::shared_ptr generateLicenseData(); std::shared_ptr getTeamSpeakLicense() { return this->teamspeak_license; } std::shared_ptr getDefaultServerProperties() { return this->default_server_properties; } std::shared_ptr getWebIoLoop() { return this->web_event_loop; } std::shared_ptr getWebList() { return this->web_list; } std::shared_ptr getPermissionMapper() { return this->permission_mapper; } std::shared_ptr getConversationIo() { return this->conversation_io; } [[nodiscard]] inline const auto& server_command_executor() { return this->server_command_executor_; } permission::v2::PermissionFlaggedValue calculate_permission( permission::PermissionType, ClientDbId, ClientType type, ChannelId channel, bool granted = false, std::shared_ptr cache = nullptr ); std::vector> calculate_permissions( const std::deque&, ClientDbId, ClientType type, ChannelId channel, bool granted = false, std::shared_ptr cache = nullptr ); [[nodiscard]] inline std::shared_ptr license_service() { return this->license_service_; } private: std::mutex activeLock; std::condition_variable activeCon; bool active = false; std::chrono::system_clock::time_point startTimestamp; std::chrono::system_clock::time_point sqlTestTimestamp; std::chrono::system_clock::time_point speachUpdateTimestamp; std::chrono::system_clock::time_point groupSaveTimestamp; std::chrono::system_clock::time_point channelSaveTimestamp; std::chrono::system_clock::time_point generalUpdateTimestamp; std::chrono::system_clock::time_point statisticsUpdateTimestamp; std::chrono::system_clock::time_point memcleanTimestamp; SqlDataManager* sql; QueryServer* queryServer = nullptr; VirtualServerManager* voiceServerManager = nullptr; DatabaseHelper* dbHelper = nullptr; BanManager* banMgr = nullptr; ssl::SSLManager* sslMgr = nullptr; file::FileServerHandler* file_server_handler_{nullptr}; std::unique_ptr action_logger_{nullptr}; ts::Properties* _properties = nullptr; std::shared_ptr server_command_executor_{}; std::shared_ptr conversation_io = nullptr; std::shared_ptr web_event_loop = nullptr; std::shared_ptr web_list = nullptr; std::shared_ptr default_server_properties = nullptr; std::shared_ptr default_tree = nullptr; std::shared_mutex default_tree_lock; std::shared_ptr groupManager = nullptr; std::shared_ptr globalServerAdmin = nullptr; std::shared_ptr _musicRoot = nullptr; std::shared_ptr license_service_{nullptr}; std::shared_ptr statistics = nullptr; std::shared_ptr tick_manager = nullptr; std::shared_ptr general_task_executor_{nullptr}; std::shared_ptr permission_mapper = nullptr; std::shared_ptr teamspeak_license = nullptr; std::string web_cert_revision{}; threads::Mutex lock_tick; private: bool setupDefaultGroups(); void tickInstance(); void save_group_permissions(); void save_channel_permissions(); void loadWebCertificate(); }; } } extern ts::server::InstanceHandler* serverInstance;