X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/750f1f62ce6576bf1ad86366a5fb8ce1c4524ccd..a6823135a2eb8a485b40288807fb95e66e48b727:/projects/stargazer/plugins/configuration/sgconfig/configproto.cpp
diff --git a/projects/stargazer/plugins/configuration/sgconfig/configproto.cpp b/projects/stargazer/plugins/configuration/sgconfig/configproto.cpp
index d54c68f9..5c176f45 100644
--- a/projects/stargazer/plugins/configuration/sgconfig/configproto.cpp
+++ b/projects/stargazer/plugins/configuration/sgconfig/configproto.cpp
@@ -27,6 +27,7 @@
#include "parser_admins.h"
#include "parser_tariffs.h"
#include "parser_users.h"
+#include "parser_services.h"
#include "parser_message.h"
#include "parser_user_info.h"
#include "parser_auth_by.h"
@@ -49,14 +50,16 @@
namespace SP = STG::PARSER;
-CONFIGPROTO::CONFIGPROTO(PLUGIN_LOGGER & l)
+CONFIGPROTO::CONFIGPROTO(STG::PluginLogger & l)
: m_settings(NULL),
m_admins(NULL),
m_tariffs(NULL),
m_users(NULL),
+ m_services(NULL),
+ m_corporations(NULL),
+ m_store(NULL),
m_port(0),
m_bindAddress("0.0.0.0"),
- m_running(false),
m_stopped(true),
m_logger(l),
m_listenSocket(-1)
@@ -65,9 +68,16 @@ CONFIGPROTO::CONFIGPROTO(PLUGIN_LOGGER & l)
CONFIGPROTO::~CONFIGPROTO()
{
+ {
std::deque<STG::Conn *>::iterator it;
for (it = m_conns.begin(); it != m_conns.end(); ++it)
delete *it;
+ }
+ {
+ BASE_PARSER::REGISTRY::iterator it;
+ for (it = m_registry.begin(); it != m_registry.end(); ++it)
+ delete it->second;
+ }
}
int CONFIGPROTO::Prepare()
@@ -79,7 +89,6 @@ int CONFIGPROTO::Prepare()
sigaddset(&sigmask, SIGUSR1);
sigaddset(&sigmask, SIGHUP);
pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
-
m_listenSocket = socket(PF_INET, SOCK_STREAM, 0);
if (m_listenSocket < 0)
@@ -110,14 +119,12 @@ int CONFIGPROTO::Prepare()
RegisterParsers();
- m_running = true;
m_stopped = false;
return 0;
}
int CONFIGPROTO::Stop()
{
- m_running = false;
for (int i = 0; i < 5 && !m_stopped; ++i)
{
struct timespec ts = {0, 200000000};
@@ -136,9 +143,9 @@ int CONFIGPROTO::Stop()
return 0;
}
-void CONFIGPROTO::Run()
+void CONFIGPROTO::Run(std::stop_token token)
{
- while (m_running)
+ while (!token.stop_requested())
{
fd_set fds;
@@ -156,7 +163,7 @@ void CONFIGPROTO::Run()
m_logger(m_errorStr);
break;
}
- if (!m_running)
+ if (token.stop_requested())
break;
if (res > 0)
HandleEvents(fds);
@@ -207,6 +214,8 @@ void CONFIGPROTO::RegisterParsers()
assert(m_admins != NULL);
assert(m_users != NULL);
assert(m_tariffs != NULL);
+ assert(m_services != NULL);
+ assert(m_corporations != NULL);
SP::GET_SERVER_INFO::FACTORY::Register(m_registry, *m_settings, *m_users, *m_tariffs);
@@ -227,6 +236,12 @@ void CONFIGPROTO::RegisterParsers()
SP::CHG_USER::FACTORY::Register(m_registry, *m_users, *m_store, *m_tariffs);
SP::CHECK_USER::FACTORY::Register(m_registry, *m_users);
+ SP::GET_SERVICES::FACTORY::Register(m_registry, *m_services);
+ SP::GET_SERVICE::FACTORY::Register(m_registry, *m_services);
+ SP::ADD_SERVICE::FACTORY::Register(m_registry, *m_services);
+ SP::DEL_SERVICE::FACTORY::Register(m_registry, *m_services);
+ SP::CHG_SERVICE::FACTORY::Register(m_registry, *m_services);
+
SP::SEND_MESSAGE::FACTORY::Register(m_registry, *m_users);
SP::AUTH_BY::FACTORY::Register(m_registry, *m_users);