X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/25d817aaf266fdf5300ca0b662426caaed4e924e..9c340da9ffa670c20c3658a2be43d35868a9f5d9:/projects/stargazer/user_impl.h?ds=sidebyside diff --git a/projects/stargazer/user_impl.h b/projects/stargazer/user_impl.h index 5b473627..8bc69664 100644 --- a/projects/stargazer/user_impl.h +++ b/projects/stargazer/user_impl.h @@ -27,28 +27,34 @@ #ifndef USER_IMPL_H #define USER_IMPL_H -#include +#include "stg/user.h" +#include "stg/user_stat.h" +#include "stg/user_conf.h" +#include "stg/user_ips.h" +#include "stg/user_property.h" +#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 "user.h" -#include "os_int.h" -#include "stg_const.h" -#include "user_stat.h" -#include "user_conf.h" -#include "user_ips.h" -#include "user_property.h" -#include "auth.h" -#include "stg_message.h" -#include "noncopyable.h" +#include //----------------------------------------------------------------------------- class TARIFF; class TARIFFS; class ADMIN; class USER_IMPL; +#ifdef USE_ABSTRACT_SETTINGS +class SETTINGS; +#else class SETTINGS_IMPL; +#endif //----------------------------------------------------------------------------- class USER_ID_GENERATOR { friend class USER_IMPL; @@ -60,9 +66,19 @@ private: class CHG_PASSIVE_NOTIFIER : public PROPERTY_NOTIFIER_BASE, private NONCOPYABLE { public: - CHG_PASSIVE_NOTIFIER(USER_IMPL * u) : user(u) {} + explicit CHG_PASSIVE_NOTIFIER(USER_IMPL * u) : user(u) {} void Notify(const int & oldPassive, const int & newPassive); +private: + USER_IMPL * user; +}; +//----------------------------------------------------------------------------- +class CHG_DISABLED_NOTIFIER : public PROPERTY_NOTIFIER_BASE, + private NONCOPYABLE { +public: + explicit CHG_DISABLED_NOTIFIER(USER_IMPL * u) : user(u) {} + void Notify(const int & oldValue, const int & newValue); + private: USER_IMPL * user; }; @@ -70,7 +86,7 @@ private: class CHG_TARIFF_NOTIFIER : public PROPERTY_NOTIFIER_BASE, private NONCOPYABLE { public: - CHG_TARIFF_NOTIFIER(USER_IMPL * u) : user(u) {} + explicit CHG_TARIFF_NOTIFIER(USER_IMPL * u) : user(u) {} void Notify(const std::string & oldTariff, const std::string & newTariff); private: @@ -80,18 +96,18 @@ private: class CHG_CASH_NOTIFIER : public PROPERTY_NOTIFIER_BASE, private NONCOPYABLE { public: - CHG_CASH_NOTIFIER(USER_IMPL * u) : user(u) {} + explicit CHG_CASH_NOTIFIER(USER_IMPL * u) : user(u) {} void Notify(const double & oldCash, const double & newCash); private: USER_IMPL * user; }; //----------------------------------------------------------------------------- -class CHG_IP_NOTIFIER : public PROPERTY_NOTIFIER_BASE, - private NONCOPYABLE { +class CHG_IPS_NOTIFIER : public PROPERTY_NOTIFIER_BASE, + private NONCOPYABLE { public: - CHG_IP_NOTIFIER(USER_IMPL * u) : user(u) {} - void Notify(const uint32_t & oldCash, const uint32_t & newCash); + explicit CHG_IPS_NOTIFIER(USER_IMPL * u) : user(u) {} + void Notify(const USER_IPS & oldIPs, const USER_IPS & newIPs); private: USER_IMPL * user; @@ -99,15 +115,26 @@ 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_IP_NOTIFIER; +friend class CHG_IPS_NOTIFIER; public: +#ifdef USE_ABSTRACT_SETTINGS + USER_IMPL(const SETTINGS * settings, + const STORE * store, + const TARIFFS * tariffs, + const ADMIN * sysAdmin, + const USERS * u, + const SERVICES & svcs); +#else USER_IMPL(const SETTINGS_IMPL * settings, const STORE * store, const TARIFFS * tariffs, const ADMIN * sysAdmin, - const USERS * u); + const USERS * u, + const SERVICES & svcs); +#endif USER_IMPL(const USER_IMPL & u); virtual ~USER_IMPL(); @@ -117,17 +144,23 @@ public: int WriteStat(); int WriteMonthStat(); - std::string const & GetLogin() const { return login; } + const std::string & GetLogin() const { return login; } void SetLogin(std::string const & l); 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(CURR_IP_NOTIFIER * notifier); + void DelCurrIPAfterNotifier(const CURR_IP_NOTIFIER * notifier); + + void AddConnectedBeforeNotifier(CONNECTED_NOTIFIER * notifier); + void DelConnectedBeforeNotifier(const CONNECTED_NOTIFIER * notifier); - void AddCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); - void DelCurrIPAfterNotifier(PROPERTY_NOTIFIER_BASE *); + void AddConnectedAfterNotifier(CONNECTED_NOTIFIER * notifier); + void DelConnectedAfterNotifier(const CONNECTED_NOTIFIER * notifier); int GetID() const { return id; } @@ -150,26 +183,31 @@ public: const DIR_TRAFF & GetSessionUpload() const { return sessionUpload; } const DIR_TRAFF & GetSessionDownload() const { return sessionDownload; } + time_t GetSessionUploadModificationTime() const { return sessionUploadModTime; } + time_t GetSessionDownloadModificationTime() const { return sessionDownloadModTime; } 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); void UpdatePingTime(time_t t = 0); time_t GetPingTime() const { return pingTime; } - void PrintUser() const; void Run(); 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; } @@ -178,17 +216,23 @@ public: void MidnightResetSessionStat(); void ProcessDayFee(); - void SetPrepaidTraff(); void ProcessDayFeeSpread(); void ProcessNewMonth(); + void ProcessDailyFee(); bool IsInetable(); - std::string GetEnabledDirs(); + std::string GetEnabledDirs() const; void OnAdd(); void OnDelete(); + virtual std::string GetParamValue(const std::string & name) const; + private: + USER_IMPL & operator=(const USER_IMPL & rvalue); + + void Init(); + const USERS * users; USER_PROPERTIES property; STG_LOGGER & WriteServLog; @@ -197,6 +241,8 @@ private: void Disconnect(bool fakeDisconnect, const std::string & reason); int SaveMonthStat(int month, int year); + void SetPrepaidTraff(); + int SendMessage(STG_MSG & msg) const; void ScanMessage(); @@ -215,6 +261,7 @@ private: USER_PROPERTY currIP; uint32_t lastIPForDisconnect; // User's ip after unauth but before disconnect + std::string lastDisconnectReason; time_t pingTime; @@ -224,12 +271,19 @@ private: const TARIFFS * tariffs; const TARIFF * tariff; + const SERVICES & m_services; + TRAFF_STAT traffStat; std::pair traffStatSaved; +#ifdef USE_ABSTRACT_SETTINGS + const SETTINGS * settings; +#else const SETTINGS_IMPL * settings; +#endif std::set authorizedBy; + time_t authorizedModificationTime; std::list messages; @@ -278,11 +332,14 @@ private: DIR_TRAFF sessionUpload; DIR_TRAFF sessionDownload; + time_t sessionUploadModTime; + time_t sessionDownloadModTime; CHG_PASSIVE_NOTIFIER passiveNotifier; + CHG_DISABLED_NOTIFIER disabledNotifier; CHG_TARIFF_NOTIFIER tariffNotifier; CHG_CASH_NOTIFIER cashNotifier; - CHG_IP_NOTIFIER ipNotifier; + CHG_IPS_NOTIFIER ipNotifier; mutable pthread_mutex_t mutex; @@ -290,4 +347,6 @@ private: }; //----------------------------------------------------------------------------- +typedef USER_IMPL * USER_IMPL_PTR; + #endif //USER_H