]> git.stg.codes - stg.git/blobdiff - include/stg/user.h
Complete replacement notifiers with subscriptions.
[stg.git] / include / stg / user.h
index 654f33441898e19a0687f88c36dacb91c6e8e233..78b602ba25a679050a4978e78714be2a379380c3 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#ifndef USER_H
-#define USER_H
+#pragma once
 
-#include "notifer.h"
 #include "message.h"
-#include "tariff.h"
-#include "user_traff.h"
+#include "user_property.h"
 
 #include <vector>
 #include <string>
 #include <ctime>
 #include <cstdint>
 
-class USER_PROPERTIES;
-class AUTH;
+namespace STG
+{
 
-typedef PROPERTY_NOTIFIER_BASE<uint32_t> CURR_IP_NOTIFIER;
-typedef PROPERTY_NOTIFIER_BASE<bool> CONNECTED_NOTIFIER;
+struct Tariff;
+class UserProperties;
+class DirTraff;
+struct Auth;
 
-class USER {
-public:
-    virtual ~USER() {}
-    virtual int                 WriteConf() = 0;
-    virtual int                 WriteStat() = 0;
+class User
+{
+    public:
+        User() noexcept
+            : m_connectedBase(false),
+              m_currIPBase(0),
+              m_connected(m_connectedBase),
+              m_currIP(m_currIPBase)
+        {
+        }
 
-    virtual const std::string & GetLogin() const = 0;
+        virtual ~User() = default;
 
-    virtual uint32_t            GetCurrIP() const = 0;
-    virtual time_t              GetCurrIPModificationTime() const = 0;
+        virtual int                 WriteConf() = 0;
+        virtual int                 WriteStat() = 0;
 
-    virtual void                AddCurrIPBeforeNotifier(CURR_IP_NOTIFIER * notifier) = 0;
-    virtual void                DelCurrIPBeforeNotifier(const CURR_IP_NOTIFIER * notifier) = 0;
+        virtual const std::string&  GetLogin() const = 0;
 
-    virtual void                AddCurrIPAfterNotifier(CURR_IP_NOTIFIER * notifier) = 0;
-    virtual void                DelCurrIPAfterNotifier(const CURR_IP_NOTIFIER * notifier) = 0;
+        uint32_t                    GetCurrIP() const { return m_currIP; }
+        time_t                      GetCurrIPModificationTime() const { return m_currIP.ModificationTime(); }
 
-    virtual void                AddConnectedBeforeNotifier(CONNECTED_NOTIFIER * notifier) = 0;
-    virtual void                DelConnectedBeforeNotifier(const CONNECTED_NOTIFIER * notifier) = 0;
+        template <typename F>
+        auto                        beforeCurrIPChange(F&& f) { return m_currIP.beforeChange(std::forward<F>(f)); }
+        template <typename F>
+        auto                        afterCurrIPChange(F&& f) { return m_currIP.afterChange(std::forward<F>(f)); }
 
-    virtual void                AddConnectedAfterNotifier(CONNECTED_NOTIFIER * notifier) = 0;
-    virtual void                DelConnectedAfterNotifier(const CONNECTED_NOTIFIER * notifier) = 0;
+        template <typename F>
+        auto                        beforeConnectedChange(F&& f) { return m_connected.beforeChange(std::forward<F>(f)); }
+        template <typename F>
+        auto                        afterConnectedChange(F&& f) { return m_connected.afterChange(std::forward<F>(f)); }
 
-    virtual int                 GetID() const = 0;
+        virtual int                 GetID() const = 0;
 
-    virtual double              GetPassiveTimePart() const = 0;
+        virtual double              GetPassiveTimePart() const = 0;
 
-    virtual const TARIFF *      GetTariff() const = 0;
-    virtual void                ResetNextTariff() = 0;
+        virtual const Tariff*       GetTariff() const = 0;
+        virtual void                ResetNextTariff() = 0;
 
-    virtual const DIR_TRAFF &   GetSessionUpload() const = 0;
-    virtual const DIR_TRAFF &   GetSessionDownload() const = 0;
-    virtual time_t              GetSessionUploadModificationTime() const = 0;
-    virtual time_t              GetSessionDownloadModificationTime() const = 0;
+        virtual const DirTraff&     GetSessionUpload() const = 0;
+        virtual const DirTraff&     GetSessionDownload() const = 0;
+        virtual time_t              GetSessionUploadModificationTime() const = 0;
+        virtual time_t              GetSessionDownloadModificationTime() const = 0;
 
-    virtual bool                GetConnected() const = 0;
-    virtual time_t              GetConnectedModificationTime() const = 0;
-    virtual const std::string & GetLastDisconnectReason() const = 0;
-    virtual int                 GetAuthorized() const = 0;
-    virtual time_t              GetAuthorizedModificationTime() const = 0;
+        bool                        GetConnected() const { return m_connected; }
+        time_t                      GetConnectedModificationTime() const { return m_connected.ModificationTime(); }
 
-    virtual bool                IsAuthorizedBy(const AUTH * auth) const = 0;
-    virtual std::vector<std::string> GetAuthorizers() const = 0;
+        virtual const std::string&  GetLastDisconnectReason() const = 0;
+        virtual int                 GetAuthorized() const = 0;
+        virtual time_t              GetAuthorizedModificationTime() const = 0;
 
-    virtual int                 AddMessage(STG_MSG * msg) = 0;
+        virtual bool                IsAuthorizedBy(const Auth * auth) const = 0;
+        virtual std::vector<std::string> GetAuthorizers() const = 0;
 
-    virtual void                UpdatePingTime(time_t t = 0) = 0;
-    virtual time_t              GetPingTime() const = 0;
+        virtual int                 AddMessage(Message* msg) = 0;
 
-    virtual void                Run() = 0;
+        virtual void                UpdatePingTime(time_t t = 0) = 0;
+        virtual time_t              GetPingTime() const = 0;
 
-    virtual const std::string & GetStrError() const = 0;
+        virtual void                Run() = 0;
 
-    virtual USER_PROPERTIES &   GetProperty() = 0;
-    virtual const USER_PROPERTIES & GetProperty() const = 0;
+        virtual const std::string&  GetStrError() const = 0;
 
-    virtual bool                GetDeleted() const = 0;
-    virtual void                SetDeleted() = 0;
+        virtual UserProperties&     GetProperties() = 0;
+        virtual const UserProperties& GetProperties() const = 0;
 
-    virtual time_t              GetLastWriteStatTime() const = 0;
+        virtual bool                GetDeleted() const = 0;
+        virtual void                SetDeleted() = 0;
 
-    virtual bool                IsInetable() = 0;
-    virtual std::string         GetEnabledDirs() const = 0;
+        virtual time_t              GetLastWriteStatTime() const = 0;
 
-    virtual void                OnAdd() = 0;
-    virtual void                OnDelete() = 0;
+        virtual bool                IsInetable() = 0;
+        virtual std::string         GetEnabledDirs() const = 0;
 
-    virtual std::string GetParamValue(const std::string & name) const = 0;
-};
+        virtual void                OnAdd() = 0;
+        virtual void                OnDelete() = 0;
+
+        virtual std::string GetParamValue(const std::string& name) const = 0;
 
-typedef USER * USER_PTR;
-typedef const USER * CONST_USER_PTR;
+    private:
+        bool m_connectedBase;
+        uint32_t m_currIPBase;
+
+    protected:
+        UserProperty<bool> m_connected;
+        UserProperty<uint32_t> m_currIP;
+};
 
-#endif
+}