X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/12aae76fbeaa3dc91ab5ecad5531a2c1925340d2..bfe43ecdff681f0b4395841a33a2721f8f8a983b:/projects/stargazer/user_impl.cpp diff --git a/projects/stargazer/user_impl.cpp b/projects/stargazer/user_impl.cpp index ae77da4f..34c922b2 100644 --- a/projects/stargazer/user_impl.cpp +++ b/projects/stargazer/user_impl.cpp @@ -38,14 +38,14 @@ #include #include +#include "stg/users.h" +#include "stg/common.h" +#include "stg/scriptexecuter.h" +#include "stg/tariff.h" +#include "stg/tariffs.h" +#include "stg/admin.h" #include "user_impl.h" -#include "users.h" -#include "common.h" #include "settings_impl.h" -#include "script_executer.h" -#include "tariff.h" -#include "tariffs.h" -#include "admin.h" USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, const STORE * st, @@ -116,12 +116,12 @@ tariff = tariffs->GetNoTariff(); ips = StrToIPS("*"); deleted = false; lastWriteStat = stgTime + random() % settings->GetStatWritePeriod(); -lastWriteDeatiledStat = stgTime; +lastWriteDetailedStat = stgTime; property.tariffName.AddBeforeNotifier(&tariffNotifier); property.passive.AddBeforeNotifier(&passiveNotifier); property.cash.AddBeforeNotifier(&cashNotifier); -currIP.AddAfterNotifier(&ipNotifier); +ips.AddAfterNotifier(&ipNotifier); lastScanMessages = 0; @@ -194,14 +194,14 @@ connected = 0; deleted = u.deleted; lastWriteStat = u.lastWriteStat; -lastWriteDeatiledStat = u.lastWriteDeatiledStat; +lastWriteDetailedStat = u.lastWriteDetailedStat; settings = u.settings; property.tariffName.AddBeforeNotifier(&tariffNotifier); property.passive.AddBeforeNotifier(&passiveNotifier); property.cash.AddBeforeNotifier(&cashNotifier); -currIP.AddAfterNotifier(&ipNotifier); +ips.AddAfterNotifier(&ipNotifier); lastScanMessages = 0; @@ -316,8 +316,6 @@ int USER_IMPL::WriteStat() STG_LOCKER lock(&mutex, __FILE__, __LINE__); USER_STAT stat(property.GetStat()); -printfd(__FILE__, "USER::WriteStat()\n"); - if (store->SaveUserStat(stat, login)) { WriteServLog("Cannot write stat for user %s.", login.c_str()); @@ -380,7 +378,7 @@ if (authorizedBy.size()) if (currIP != ip) { // We are already authorized, but with different IP address - errorStr = "User " + login + " alredy authorized with IP address " + inet_ntostring(ip); + errorStr = "User " + login + " already authorized with IP address " + inet_ntostring(ip); return -1; } @@ -391,7 +389,7 @@ if (authorizedBy.size()) // If it's not our IP - throw an error if (u != this) { - errorStr = "IP address " + inet_ntostring(ip) + " alredy in use"; + errorStr = "IP address " + inet_ntostring(ip) + " already in use"; return -1; } } @@ -401,7 +399,7 @@ else if (users->IsIPInIndex(ip)) { // Address is already present in IP-index - errorStr = "IP address " + inet_ntostring(ip) + " alredy in use"; + errorStr = "IP address " + inet_ntostring(ip) + " already in use"; return -1; } @@ -628,7 +626,7 @@ if (!authorizedBy.empty()) { if (connected) { - lastActivityTime = *const_cast(&stgTime); + property.Stat().lastActivityTime = stgTime; } if (!connected && IsInetable()) { @@ -908,6 +906,30 @@ STG_LOCKER lock(&mutex, __FILE__, __LINE__); currIP.DelAfterNotifier(n); } //----------------------------------------------------------------------------- +void USER_IMPL::AddConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE * n) +{ +STG_LOCKER lock(&mutex, __FILE__, __LINE__); +connected.AddBeforeNotifier(n); +} +//----------------------------------------------------------------------------- +void USER_IMPL::DelConnectedBeforeNotifier(PROPERTY_NOTIFIER_BASE * n) +{ +STG_LOCKER lock(&mutex, __FILE__, __LINE__); +connected.DelBeforeNotifier(n); +} +//----------------------------------------------------------------------------- +void USER_IMPL::AddConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE * n) +{ +STG_LOCKER lock(&mutex, __FILE__, __LINE__); +connected.AddAfterNotifier(n); +} +//----------------------------------------------------------------------------- +void USER_IMPL::DelConnectedAfterNotifier(PROPERTY_NOTIFIER_BASE * n) +{ +STG_LOCKER lock(&mutex, __FILE__, __LINE__); +connected.DelAfterNotifier(n); +} +//----------------------------------------------------------------------------- void USER_IMPL::OnAdd() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); @@ -981,7 +1003,7 @@ printfd(__FILE__, "USER::WriteDetailedStat() - size = %d\n", ts.size()); if (ts.size() && !disabledDetailStat) { - if (store->WriteDetailedStat(ts, lastWriteDeatiledStat, login)) + if (store->WriteDetailedStat(ts, lastWriteDetailedStat, login)) { printfd(__FILE__, "USER::WriteDetailStat() - failed to write current detail stat\n"); WriteServLog("Cannot write detail stat for user %s.", login.c_str()); @@ -991,12 +1013,12 @@ if (ts.size() && !disabledDetailStat) printfd(__FILE__, "USER::WriteDetailStat() - pushing detail stat to queue\n"); STG_LOCKER lock(&mutex, __FILE__, __LINE__); traffStatSaved.second.swap(ts); - traffStatSaved.first = lastWriteDeatiledStat; + traffStatSaved.first = lastWriteDetailedStat; } return -1; } } -lastWriteDeatiledStat = stgTime; +lastWriteDetailedStat = stgTime; return 0; } //----------------------------------------------------------------------------- @@ -1257,6 +1279,10 @@ while (it != messages.end()) ++it; } } + else + { + ++it; + } } } //----------------------------------------------------------------------------- @@ -1283,14 +1309,12 @@ user->lastCashAddTime = *const_cast(&stgTime); user->lastCashAdd = newCash - oldCash; } //----------------------------------------------------------------------------- -void CHG_IP_NOTIFIER::Notify(const uint32_t & from, const uint32_t & to) +void CHG_IPS_NOTIFIER::Notify(const USER_IPS & from, const USER_IPS & to) { - printfd(__FILE__, "Change IP from %s to %s\n", inet_ntostring(from).c_str(), inet_ntostring(to).c_str()); - if (from != 0) - if (user->connected) - user->Disconnect(false, "Change IP"); - if (to != 0) - if (user->IsInetable()) - user->Connect(false); + printfd(__FILE__, "Change IP from '%s' to '%s'\n", from.GetIpStr().c_str(), to.GetIpStr().c_str()); + if (user->connected) + user->Disconnect(true, "Change IP"); + if (user->IsInetable()) + user->Connect(true); } //-----------------------------------------------------------------------------