]> git.stg.codes - stg.git/commitdiff
Allow to use virtual inheritance on SETTINGS for testing purposes
authorMaxim Mamontov <faust@gts.dp.ua>
Thu, 26 May 2011 12:16:34 +0000 (15:16 +0300)
committerMaxim Mamontov <faust@gts.dp.ua>
Thu, 26 May 2011 12:16:34 +0000 (15:16 +0300)
include/stg/settings.h
projects/stargazer/user_impl.cpp
projects/stargazer/user_impl.h

index e97f3e2af111070f57feb3f4a12276238495d21b..16714be3803e9d747a2fce9398db53c1438219d5 100644 (file)
@@ -26,6 +26,7 @@
 class SETTINGS {
 public:
     virtual const std::string & GetDirName(size_t num) const = 0;
 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;
     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 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;
 };
     virtual const std::string & GetMonitorDir() const = 0;
     virtual bool                GetMonitoring() const = 0;
 };
index 5abbeef703bab23b30d99cf1bd117eedfd6e00f1..7153012a308be177d0d914ca9213dd679f2f0076 100644 (file)
 #include "user_impl.h"
 #include "settings_impl.h"
 
 #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,
 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);
 }
 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
 pthread_mutex_init(&mutex, &attr);
 }
+#endif
 //-----------------------------------------------------------------------------
 USER_IMPL::USER_IMPL(const USER_IMPL & u)
     : users(u.users),
 //-----------------------------------------------------------------------------
 USER_IMPL::USER_IMPL(const USER_IMPL & u)
     : users(u.users),
index 1aaffc867f90bec75d3e33621d923fa51999e21d..3701bdd0f8834c5f165ba3aa540afbdc38397dd2 100644 (file)
@@ -48,7 +48,11 @@ class TARIFF;
 class TARIFFS;
 class ADMIN;
 class USER_IMPL;
 class TARIFFS;
 class ADMIN;
 class USER_IMPL;
+#ifdef USE_ABSTRACT_SETTINGS
+class SETTINGS;
+#else
 class SETTINGS_IMPL;
 class SETTINGS_IMPL;
+#endif
 //-----------------------------------------------------------------------------
 class USER_ID_GENERATOR {
 friend class USER_IMPL;
 //-----------------------------------------------------------------------------
 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:
 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);
     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();
 
     USER_IMPL(const USER_IMPL & u);
     virtual ~USER_IMPL();
 
@@ -233,7 +245,11 @@ private:
     TRAFF_STAT      traffStat;
     std::pair<time_t, TRAFF_STAT> traffStatSaved;
 
     TRAFF_STAT      traffStat;
     std::pair<time_t, TRAFF_STAT> traffStatSaved;
 
+#ifdef USE_ABSTRACT_SETTINGS
+    const SETTINGS * settings;
+#else
     const SETTINGS_IMPL * settings;
     const SETTINGS_IMPL * settings;
+#endif
 
     std::set<const AUTH *> authorizedBy;
 
 
     std::set<const AUTH *> authorizedBy;