]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/configproto.h
Use std::lock_guard instead of STG_LOCKER.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / configproto.h
index b50b434aa80993bedf15830888b6dde8ab5daf80..02452bddb79518c799044c284c8aae2faa0e2b93 100644 (file)
 
 /*
  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
+ *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
- /*
- $Revision: 1.14 $
- $Date: 2010/10/04 20:24:14 $
- $Author: faust $
- */
+#pragma once
 
+#include "parser.h"
 
-#ifndef CONFIGPROTO_H
-#define CONFIGPROTO_H
+#include "stg/module_settings.h"
 
 #include <string>
-#include <list>
-#include <vector>
+#include <deque>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
+#include <cstdint>
+
+#include <sys/select.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+namespace STG
+{
+
+struct Settings;
+struct Admins;
+class Tariffs;
+class Users;
+struct Services;
+struct Corporations;
+struct Store;
+class PluginLogger;
+
+class Conn;
+
+}
 
-#include "stg/module_settings.h"
-#include "stg/os_int.h"
-
-#include <expat.h>
-#include <pthread.h>
-
-#define  STG_HEADER     "SG04"
-#define  OK_HEADER      "OKHD"
-#define  ERR_HEADER     "ERHD"
-#define  OK_LOGIN       "OKLG"
-#define  ERR_LOGIN      "ERLG"
-#define  OK_LOGINS      "OKLS"
-#define  ERR_LOGINS     "ERLS"
-
-class BASE_PARSER;
-class USERS;
-class ADMINS;
-class ADMIN;
-class TARIFFS;
-class PLUGIN_LOGGER;
-class STORE;
-class SETTINGS;
-
-//-----------------------------------------------------------------------------
 class CONFIGPROTO {
 public:
-    CONFIGPROTO(PLUGIN_LOGGER & l);
+    explicit CONFIGPROTO(STG::PluginLogger & l);
     ~CONFIGPROTO();
 
-    void            SetPort(uint16_t p) { port = p; }
-    void            SetAdmins(ADMINS * a);
-    void            SetUsers(USERS * u);
-    void            SetTariffs(TARIFFS * t);
-    void            SetStore(STORE * s);
-    void            SetStgSettings(const SETTINGS * s);
-    uint32_t        GetAdminIP() const { return adminIP; }
-    int             Prepare();
-    int             Stop();
-    const std::string & GetStrError() const { return errorStr; }
-    void            Run();
+    void SetPort(uint16_t port) { m_port = port; }
+    void SetBindAddress(const std::string & address) { m_bindAddress = address; }
+    void SetSettings(const STG::Settings * settings) { m_settings = settings; }
+    void SetAdmins(STG::Admins * admins) { m_admins = admins; }
+    void SetTariffs(STG::Tariffs * tariffs) { m_tariffs = tariffs; }
+    void SetUsers(STG::Users * users) { m_users = users; }
+    void SetStore(STG::Store * store) { m_store = store; }
+    void SetServices(STG::Services * services) { m_services = services; }
+    void SetCorporations(STG::Corporations * corporations) { m_corporations = corporations; }
+
+    int Prepare();
+    int Stop();
+    const std::string & GetStrError() const { return m_errorStr; }
+    void Run(std::stop_token token);
 
 private:
     CONFIGPROTO(const CONFIGPROTO & rvalue);
     CONFIGPROTO & operator=(const CONFIGPROTO & rvalue);
 
-    int             RecvHdr(int sock);
-    int             RecvLogin(int sock);
-    int             SendLoginAnswer(int sock);
-    int             SendHdrAnswer(int sock, int err);
-    int             RecvLoginS(int sock);
-    int             SendLoginSAnswer(int sock, int err);
-    int             RecvData(int sock);
-    int             SendDataAnswer(int sock, const std::string & answer);
-    int             SendError(int sock, const std::string & text);
-    void            WriteLogAccessFailed(uint32_t ip);
-    const std::string & GetDataAnswer() const { return dataAnswer; }
-
-    int             ParseCommand();
-
-    std::list<std::string>      requestList;
-    uint32_t                    adminIP;
-    std::string                 adminLogin;
-    std::string                 adminPassword;
-    uint16_t                    port;
-    pthread_t                   thrReciveSendConf;
-    bool                        nonstop;
-    int                         state;
-    ADMIN *                     currAdmin;
-    PLUGIN_LOGGER &             logger;
-    std::string                 dataAnswer;
-
-    int                         listenSocket;
-
-    ADMINS *                    admins;
-
-    BASE_PARSER *               currParser;
-    std::vector<BASE_PARSER *>  dataParser;
-
-    XML_Parser                  xmlParser;
-
-    std::string                 errorStr;
-
-    friend void ParseXMLStart(void *data, const char *el, const char **attr);
-    friend void ParseXMLEnd(void *data, const char *el);
+    const STG::Settings * m_settings;
+    STG::Admins *         m_admins;
+    STG::Tariffs *        m_tariffs;
+    STG::Users *          m_users;
+    STG::Services *       m_services;
+    STG::Corporations *   m_corporations;
+    STG::Store *          m_store;
+
+    uint16_t         m_port;
+    std::string      m_bindAddress;
+    bool             m_stopped;
+    STG::PluginLogger &   m_logger;
+    int              m_listenSocket;
+
+    std::string      m_errorStr;
+
+    BASE_PARSER::REGISTRY m_registry;
+    std::deque<STG::Conn *> m_conns;
+
+    bool Bind();
+
+    void RegisterParsers();
+
+    int MaxFD() const;
+    void BuildFDSet(fd_set & fds) const;
+    void CleanupConns();
+    void HandleEvents(const fd_set & fds);
+    void AcceptConnection();
 };
-//-----------------------------------------------------------------------------
-#endif //CONFIGPROTO_H