X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/719cadd2fba317b9d4f5fbadf9e9036fd07f3658..be1b46cc784e43cd28c5521bdcde79bd7463fb40:/projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp?ds=sidebyside diff --git a/projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp b/projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp index ca2dd440..4666575c 100644 --- a/projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp +++ b/projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp @@ -20,7 +20,6 @@ #include "stgconfig.h" -#include "stg/plugin_creator.h" #include "stg/common.h" #include @@ -31,18 +30,14 @@ //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -static PLUGIN_CREATOR stgc; -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -bool STG_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) +bool STG_CONFIG_SETTINGS::ParseSettings(const STG::ModuleSettings & s) { - PARAM_VALUE pv; - std::vector::const_iterator pvi; + STG::ParamValue pv; + std::vector::const_iterator pvi; /////////////////////////// pv.param = "Port"; pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); - if (pvi == s.moduleParams.end()) + if (pvi == s.moduleParams.end() || pvi->value.empty()) { errorStr = "Parameter \'Port\' is not found."; printfd(__FILE__, "%s\n", errorStr.c_str()); @@ -59,7 +54,7 @@ bool STG_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) pv.param = "BindAddress"; pvi = std::find(s.moduleParams.begin(), s.moduleParams.end(), pv); - if (pvi != s.moduleParams.end()) + if (pvi != s.moduleParams.end() && !pvi->value.empty()) m_bindAddress = pvi->value[0]; return true; @@ -67,9 +62,10 @@ bool STG_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -extern "C" PLUGIN * GetPlugin() +extern "C" STG::Plugin * GetPlugin() { -return stgc.GetPlugin(); + static STG_CONFIG plugin; + return &plugin; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -77,7 +73,7 @@ return stgc.GetPlugin(); STG_CONFIG::STG_CONFIG() : nonstop(false), isRunning(false), - logger(GetPluginLogger(GetStgLogger(), "conf_sg")), + logger(STG::PluginLogger::get("conf_sg")), config(logger) { } @@ -106,13 +102,7 @@ int STG_CONFIG::Start() return -1; } - if (pthread_create(&thread, NULL, Run, this)) - { - errorStr = std::string("Cannot create thread: '") + strerror(errno) + "'."; - printfd(__FILE__, "%s\n", errorStr.c_str()); - logger(errorStr); - return -1; - } + m_thread = std::jthread([this](auto token){ Run(std::move(token)); }); return 0; } @@ -123,6 +113,7 @@ int STG_CONFIG::Stop() return 0; config.Stop(); + m_thread.request_stop(); //5 seconds to thread stops itself for (size_t i = 0; i < 25; ++i) @@ -135,23 +126,22 @@ int STG_CONFIG::Stop() } if (isRunning) - return -1; + m_thread.detach(); + else + m_thread.join(); return 0; } //----------------------------------------------------------------------------- -void * STG_CONFIG::Run(void * d) +void STG_CONFIG::Run(std::stop_token token) { sigset_t signalSet; sigfillset(&signalSet); pthread_sigmask(SIG_BLOCK, &signalSet, NULL); - STG_CONFIG & stgConf = *static_cast(d); - stgConf.isRunning = true; - - stgConf.config.Run(); + isRunning = true; - stgConf.isRunning = false; + config.Run(token); - return NULL; + isRunning = false; }