#ifndef C7F1A9D3_4E28_4B60_9C15_8A3E6D2F0B94 #define C7F1A9D3_4E28_4B60_9C15_8A3E6D2F0B94 /* ******************************************************************************* * INCLUDE ******************************************************************************* */ #include #include #include #include #include #include #include #include #include #include "util/JsonUtil.h" /* ******************************************************************************* * CONSTANTS ******************************************************************************* */ #define APPLICATION_VERSION application().version() /* ******************************************************************************* * MACROS ******************************************************************************* */ #define application() (*(Application::getInstance())) /* ******************************************************************************* * TYPEDEFS ******************************************************************************* */ using ConfigurationPtr = Poco::Util::AbstractConfiguration::Ptr; using Configuration = Poco::Util::AbstractConfiguration; /* ******************************************************************************* * CLASS DECLARE ******************************************************************************* */ class Application: public Poco::Util::Application { public: struct SystemStatus { }; public: static const std::string ROOT_CONFIG; Poco::BasicEvent ConfigChanged; Poco::BasicEvent ApplicationExitNotify; protected: void initialize(Poco::Util::Application& self) override; void uninitialize() override; int main(const std::vector& args) override; std::string getConfigFilePath(const std::string& label); template T& findConfig(const std::string& label) const { return *static_cast(config().find(label).get()); } void initConfigAll(); void initConfig(const std::string& label); public: std::string version() const; Poco::Util::AbstractConfiguration& getConfig() const; Poco::Util::AbstractConfiguration& getConfig(const std::string& label) const; void saveConfig(const std::string& label); void loadConfig(const std::string& label, std::istream& istr); void loadConfig(const std::string& label, const std::string& istr); void dumpConfig(const std::string& label, std::ostream& ostr); void configNotifyAsync(const std::string& label); void restoreFactorySettings(); void reboot(uint32_t delay = 2000); void setSystemTime(uint32_t timestamp, int timezone = 8); void exit(); void upgrade(const std::string& file); static Application* getInstance() { Poco::Util::Application& app = instance(); return static_cast(&app); } private: Poco::Thread _delayRebootThread; std::atomic _exitRequst; }; #endif