X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/f907011b4827e85763372cdea76944b3b1cc3fd2..8383a049b4b6f7223dd833af18675696fc0663db:/projects/stargazer/user_impl.h diff --git a/projects/stargazer/user_impl.h b/projects/stargazer/user_impl.h index 17623294..150f2a8b 100644 --- a/projects/stargazer/user_impl.h +++ b/projects/stargazer/user_impl.h @@ -27,14 +27,7 @@ #ifndef USER_IMPL_H #define USER_IMPL_H -#include -#include -#include -#include - #include "stg/user.h" -#include "stg/os_int.h" -#include "stg/const.h" #include "stg/user_stat.h" #include "stg/user_conf.h" #include "stg/user_ips.h" @@ -42,6 +35,15 @@ #include "stg/auth.h" #include "stg/message.h" #include "stg/noncopyable.h" +#include "stg/os_int.h" +#include "stg/const.h" + +#include +#include +#include +#include + +#include //----------------------------------------------------------------------------- class TARIFF; @@ -68,9 +70,16 @@ public: void Notify(const int & oldPassive, const int & newPassive); private: - CHG_PASSIVE_NOTIFIER(const CHG_PASSIVE_NOTIFIER & rvalue); - CHG_PASSIVE_NOTIFIER & operator=(const CHG_PASSIVE_NOTIFIER & rvalue); + USER_IMPL * user; +}; +//----------------------------------------------------------------------------- +class CHG_DISABLED_NOTIFIER : public PROPERTY_NOTIFIER_BASE, + private NONCOPYABLE { +public: + CHG_DISABLED_NOTIFIER(USER_IMPL * u) : user(u) {} + void Notify(const int & oldValue, const int & newValue); +private: USER_IMPL * user; }; //----------------------------------------------------------------------------- @@ -81,9 +90,6 @@ public: void Notify(const std::string & oldTariff, const std::string & newTariff); private: - CHG_TARIFF_NOTIFIER(const CHG_TARIFF_NOTIFIER & rvalue); - CHG_TARIFF_NOTIFIER & operator=(const CHG_TARIFF_NOTIFIER & rvalue); - USER_IMPL * user; }; //----------------------------------------------------------------------------- @@ -94,18 +100,12 @@ public: void Notify(const double & oldCash, const double & newCash); private: - CHG_CASH_NOTIFIER(const CHG_CASH_NOTIFIER & rvalue); - CHG_CASH_NOTIFIER & operator=(const CHG_CASH_NOTIFIER & rvalue); - USER_IMPL * user; }; //----------------------------------------------------------------------------- class CHG_IPS_NOTIFIER : public PROPERTY_NOTIFIER_BASE, private NONCOPYABLE { public: - CHG_IPS_NOTIFIER(const CHG_IPS_NOTIFIER & rvalue); - CHG_IPS_NOTIFIER & operator=(const CHG_IPS_NOTIFIER & rvalue); - CHG_IPS_NOTIFIER(USER_IMPL * u) : user(u) {} void Notify(const USER_IPS & oldIPs, const USER_IPS & newIPs); @@ -115,6 +115,7 @@ private: //----------------------------------------------------------------------------- class USER_IMPL : public USER { friend class CHG_PASSIVE_NOTIFIER; +friend class CHG_DISABLED_NOTIFIER; friend class CHG_TARIFF_NOTIFIER; friend class CHG_CASH_NOTIFIER; friend class CHG_IPS_NOTIFIER; @@ -147,17 +148,17 @@ public: uint32_t GetCurrIP() const { return currIP; } time_t GetCurrIPModificationTime() const { return currIP.ModificationTime(); } - void AddCurrIPBeforeNotifier(PROPERTY_NOTIFIER_BASE *); - void DelCurrIPBeforeNotifier(PROPERTY_NOTIFIER_BASE *); + void AddCurrIPBeforeNotifier(CURR_IP_NOTIFIER * notifier); + void DelCurrIPBeforeNotifier(const CURR_IP_NOTIFIER * notifier); - void AddCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); - void DelCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); + void AddCurrIPAfterNotifier(CURR_IP_NOTIFIER * notifier); + void DelCurrIPAfterNotifier(const CURR_IP_NOTIFIER * notifier); - void AddConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE *); - void DelConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE *); + void AddConnectedBeforeNotifier(CONNECTED_NOTIFIER * notifier); + void DelConnectedBeforeNotifier(const CONNECTED_NOTIFIER * notifier); - void AddConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE *); - void DelConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE *); + void AddConnectedAfterNotifier(CONNECTED_NOTIFIER * notifier); + void DelConnectedAfterNotifier(const CONNECTED_NOTIFIER * notifier); int GetID() const { return id; } @@ -183,10 +184,14 @@ public: bool GetConnected() const { return connected; } time_t GetConnectedModificationTime() const { return connected.ModificationTime(); } - int GetAuthorized() const { return authorizedBy.size(); } + const std::string & GetLastDisconnectReason() const { return lastDisconnectReason; } + int GetAuthorized() const { return static_cast(authorizedBy.size()); } + time_t GetAuthorizedModificationTime() const { return authorizedModificationTime; } int Authorize(uint32_t ip, uint32_t enabledDirs, const AUTH * auth); - void Unauthorize(const AUTH * auth); + void Unauthorize(const AUTH * auth, + const std::string & reason = std::string()); bool IsAuthorizedBy(const AUTH * auth) const; + std::vector GetAuthorizers() const; int AddMessage(STG_MSG * msg); @@ -198,8 +203,8 @@ public: const std::string & GetStrError() const { return errorStr; } - USER_PROPERTIES & GetProperty() { return property; }; - const USER_PROPERTIES & GetProperty() const { return property; }; + USER_PROPERTIES & GetProperty() { return property; } + const USER_PROPERTIES & GetProperty() const { return property; } void SetDeleted() { deleted = true; } bool GetDeleted() const { return deleted; } @@ -218,6 +223,8 @@ public: void OnAdd(); void OnDelete(); + virtual std::string GetParamValue(const std::string & name) const; + private: USER_IMPL & operator=(const USER_IMPL & rvalue); @@ -249,6 +256,7 @@ private: USER_PROPERTY currIP; uint32_t lastIPForDisconnect; // User's ip after unauth but before disconnect + std::string lastDisconnectReason; time_t pingTime; @@ -268,6 +276,7 @@ private: #endif std::set authorizedBy; + time_t authorizedModificationTime; std::list messages; @@ -318,6 +327,7 @@ private: DIR_TRAFF sessionDownload; CHG_PASSIVE_NOTIFIER passiveNotifier; + CHG_DISABLED_NOTIFIER disabledNotifier; CHG_TARIFF_NOTIFIER tariffNotifier; CHG_CASH_NOTIFIER cashNotifier; CHG_IPS_NOTIFIER ipNotifier;