#pragma once #include #include #include "ServerManager.h" #include "../../license/shared/LicenseRequest.h" #include "lincense/LicenseHelper.h" #include #include "manager/SqlDataManager.h" #include "lincense/TeamSpeakLicense.h" #include "server/WebIoManager.h" namespace ts { namespace weblist { class WebListManager; } namespace server { class InstanceHandler { public: explicit InstanceHandler(SqlDataManager*); ~InstanceHandler(); bool startInstance(); void stopInstance(); ts::Properties& properties(){ return *_properties; } std::shared_ptr getInitalServerAdmin(){ 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; } ServerManager* getVoiceServerManager(){ return this->voiceServerManager; } FileServer* getFileServer(){ return fileServer; } 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(); } std::chrono::time_point getStartTimestamp(){ return startTimestamp; } void executeTick(TSServer*); void cancelExecute(TSServer*); const std::shared_ptr& musicRoot() { return this->_musicRoot; } std::chrono::milliseconds calculateSpokenTime(); void resetSpeechTime(); bool resetMonthlyStats(); 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; } 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; FileServer* fileServer = nullptr; QueryServer* queryServer = nullptr; ServerManager* voiceServerManager = nullptr; DatabaseHelper* dbHelper = nullptr; BanManager* banMgr = nullptr; ssl::SSLManager* sslMgr = nullptr; ts::Properties* _properties = 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 licenseHelper = nullptr; std::shared_ptr statistics = nullptr; std::shared_ptr tick_manager = nullptr; std::shared_ptr teamspeak_license = nullptr; threads::Mutex lock_tick; private: bool setupDefaultGroups(); void tickInstance(); void save_group_permissions(); void save_channel_permissions(); }; } } extern ts::server::InstanceHandler* serverInstance;