From 5c19a000ed76d49fae019ed50955a1a530d161f0 Mon Sep 17 00:00:00 2001 From: Maxim Mamontov Date: Thu, 26 May 2011 15:16:34 +0300 Subject: [PATCH] Allow to use virtual inheritance on SETTINGS for testing purposes --- include/stg/settings.h | 2 + projects/stargazer/user_impl.cpp | 86 ++++++++++++++++++++++++++++++++ projects/stargazer/user_impl.h | 16 ++++++ 3 files changed, 104 insertions(+) diff --git a/include/stg/settings.h b/include/stg/settings.h index e97f3e2a..16714be3 100644 --- a/include/stg/settings.h +++ b/include/stg/settings.h @@ -26,6 +26,7 @@ class SETTINGS { public: virtual const std::string & GetDirName(size_t num) const = 0; + virtual const std::string & GetScriptsDir() const = 0; virtual unsigned GetDetailStatWritePeriod() const = 0; virtual unsigned GetStatWritePeriod() const = 0; virtual unsigned GetDayFee() const = 0; @@ -37,6 +38,7 @@ public: virtual bool GetWriteFreeMbTraffCost() const = 0; virtual bool GetShowFeeInCash() const = 0; virtual unsigned GetMessageTimeout() const = 0; + virtual unsigned GetFeeChargeType() const = 0; virtual const std::string & GetMonitorDir() const = 0; virtual bool GetMonitoring() const = 0; }; diff --git a/projects/stargazer/user_impl.cpp b/projects/stargazer/user_impl.cpp index 5abbeef7..7153012a 100644 --- a/projects/stargazer/user_impl.cpp +++ b/projects/stargazer/user_impl.cpp @@ -47,6 +47,91 @@ #include "user_impl.h" #include "settings_impl.h" +#ifdef USE_ABSTRACT_SETTINGS +USER_IMPL::USER_IMPL(const SETTINGS * s, + const STORE * st, + const TARIFFS * t, + const ADMIN * a, + const USERS * u) + : users(u), + property(s->GetScriptsDir()), + WriteServLog(GetStgLogger()), + login(), + id(0), + __connected(0), + connected(__connected), + userIDGenerator(), + __currIP(0), + currIP(__currIP), + lastIPForDisconnect(0), + pingTime(0), + sysAdmin(a), + store(st), + tariffs(t), + tariff(tariffs->GetNoTariff()), + cash(property.cash), + up(property.up), + down(property.down), + lastCashAdd(property.lastCashAdd), + passiveTime(property.passiveTime), + lastCashAddTime(property.lastCashAddTime), + freeMb(property.freeMb), + lastActivityTime(property.lastActivityTime), + password(property.password), + passive(property.passive), + disabled(property.disabled), + disabledDetailStat(property.disabledDetailStat), + alwaysOnline(property.alwaysOnline), + tariffName(property.tariffName), + nextTariff(property.nextTariff), + address(property.address), + note(property.note), + group(property.group), + email(property.email), + phone(property.phone), + realName(property.realName), + credit(property.credit), + creditExpire(property.creditExpire), + ips(property.ips), + userdata0(property.userdata0), + userdata1(property.userdata1), + userdata2(property.userdata2), + userdata3(property.userdata3), + userdata4(property.userdata4), + userdata5(property.userdata5), + userdata6(property.userdata6), + userdata7(property.userdata7), + userdata8(property.userdata8), + userdata9(property.userdata9), + passiveNotifier(this), + tariffNotifier(this), + cashNotifier(this), + ipNotifier(this) +{ +settings = s; + +password = "*_EMPTY_PASSWORD_*"; +tariffName = NO_TARIFF_NAME; +connected = 0; +tariff = tariffs->GetNoTariff(); +ips = StrToIPS("*"); +deleted = false; +lastWriteStat = stgTime + random() % settings->GetStatWritePeriod(); +lastWriteDetailedStat = stgTime; + +property.tariffName.AddBeforeNotifier(&tariffNotifier); +property.passive.AddBeforeNotifier(&passiveNotifier); +property.cash.AddBeforeNotifier(&cashNotifier); +ips.AddAfterNotifier(&ipNotifier); + +lastScanMessages = 0; + +pthread_mutexattr_t attr; +pthread_mutexattr_init(&attr); +pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); +pthread_mutex_init(&mutex, &attr); +} +#else USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, const STORE * st, const TARIFFS * t, @@ -130,6 +215,7 @@ pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex, &attr); } +#endif //----------------------------------------------------------------------------- USER_IMPL::USER_IMPL(const USER_IMPL & u) : users(u.users), diff --git a/projects/stargazer/user_impl.h b/projects/stargazer/user_impl.h index 1aaffc86..3701bdd0 100644 --- a/projects/stargazer/user_impl.h +++ b/projects/stargazer/user_impl.h @@ -48,7 +48,11 @@ 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; @@ -103,11 +107,19 @@ friend class CHG_TARIFF_NOTIFIER; friend class CHG_CASH_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); +#else USER_IMPL(const SETTINGS_IMPL * settings, const STORE * store, const TARIFFS * tariffs, const ADMIN * sysAdmin, const USERS * u); +#endif USER_IMPL(const USER_IMPL & u); virtual ~USER_IMPL(); @@ -233,7 +245,11 @@ private: TRAFF_STAT traffStat; std::pair traffStatSaved; +#ifdef USE_ABSTRACT_SETTINGS + const SETTINGS * settings; +#else const SETTINGS_IMPL * settings; +#endif std::set authorizedBy; -- 2.43.2