X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/cc7685dc764b43b8a9a061f4a38549f1c04fe047..6d1a13b7d0f517c46b8456acc835bf6f5efb2b67:/projects/stargazer/user_impl.cpp?ds=sidebyside diff --git a/projects/stargazer/user_impl.cpp b/projects/stargazer/user_impl.cpp index 5abbeef7..b2cbf5d4 100644 --- a/projects/stargazer/user_impl.cpp +++ b/projects/stargazer/user_impl.cpp @@ -47,6 +47,90 @@ #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(NULL), + 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; +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, @@ -67,7 +151,7 @@ USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, sysAdmin(a), store(st), tariffs(t), - tariff(tariffs->GetNoTariff()), + tariff(NULL), cash(property.cash), up(property.up), down(property.down), @@ -112,7 +196,6 @@ settings = s; password = "*_EMPTY_PASSWORD_*"; tariffName = NO_TARIFF_NAME; connected = 0; -tariff = tariffs->GetNoTariff(); ips = StrToIPS("*"); deleted = false; lastWriteStat = stgTime + random() % settings->GetStatWritePeriod(); @@ -130,6 +213,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), @@ -681,7 +765,7 @@ if (settings->GetFreeMbAllowInet()) return true; } -if (settings->GetShowFeeInCash()) +if (settings->GetShowFeeInCash() || tariff == NULL) { return (cash >= -credit); } @@ -707,7 +791,7 @@ void USER_IMPL::AddTraffStatU(int dir, uint32_t ip, uint32_t len) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -if (!connected) +if (!connected || tariff == NULL) return; double cost = 0; @@ -799,7 +883,7 @@ void USER_IMPL::AddTraffStatD(int dir, uint32_t ip, uint32_t len) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -if (!connected) +if (!connected || tariff == NULL) return; double cost = 0; @@ -1117,7 +1201,7 @@ void USER_IMPL::ProcessDayFeeSpread() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -if (passive.ConstData()) +if (passive.ConstData() || tariff == NULL) return; double fee = tariff->GetFee() / DaysInCurrentMonth(); @@ -1147,6 +1231,9 @@ void USER_IMPL::ProcessDayFee() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); +if (tariff == NULL) + return; + double passiveTimePart = 1.0; if (!settings->GetFullFee()) { @@ -1193,7 +1280,8 @@ void USER_IMPL::SetPrepaidTraff() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -property.freeMb.Set(tariff->GetFree(), sysAdmin, login, store, "Prepaid traffic"); +if (tariff != NULL) + property.freeMb.Set(tariff->GetFree(), sysAdmin, login, store, "Prepaid traffic"); } //----------------------------------------------------------------------------- int USER_IMPL::AddMessage(STG_MSG * msg) @@ -1316,7 +1404,7 @@ while (it != messages.end()) //----------------------------------------------------------------------------- void CHG_PASSIVE_NOTIFIER::Notify(const int & oldPassive, const int & newPassive) { -if (newPassive && !oldPassive) +if (newPassive && !oldPassive && user->tariff != NULL) user->property.cash.Set(user->cash - user->tariff->GetPassiveCost(), user->sysAdmin, user->login,