From: Maxim Mamontov <faust@gts.dp.ua>
Date: Thu, 26 May 2011 12:16:34 +0000 (+0300)
Subject: Allow to use virtual inheritance on SETTINGS for testing purposes
X-Git-Tag: 2.408-alpha~144
X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/5c19a000ed76d49fae019ed50955a1a530d161f0?ds=sidebyside

Allow to use virtual inheritance on SETTINGS for testing purposes
---

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<time_t, TRAFF_STAT> traffStatSaved;
 
+#ifdef USE_ABSTRACT_SETTINGS
+    const SETTINGS * settings;
+#else
     const SETTINGS_IMPL * settings;
+#endif
 
     std::set<const AUTH *> authorizedBy;