X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/53e3e5c4fa09c1ca7e1cb44054ec38441125868c..87b2d09bd02f7edfecc39d59a151240872b18b86:/projects/stargazer/user.cpp?ds=inline diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp index 989d11b5..50046fa5 100644 --- a/projects/stargazer/user.cpp +++ b/projects/stargazer/user.cpp @@ -115,7 +115,6 @@ ips = StrToIPS("*"); deleted = false; lastWriteStat = stgTime + random() % settings->GetStatWritePeriod(); lastWriteDeatiledStat = stgTime; -lastSwapDeatiledStat = stgTime; property.tariffName.AddBeforeNotifier(&tariffNotifier); property.passive.AddBeforeNotifier(&passiveNotifier); @@ -197,7 +196,6 @@ deleted = u.deleted; lastWriteStat = u.lastWriteStat; lastWriteDeatiledStat = u.lastWriteDeatiledStat; -lastSwapDeatiledStat = u.lastSwapDeatiledStat; settings = u.settings; @@ -257,6 +255,24 @@ if (tariff == NULL) return -1; } +std::vector hdrsList; + +if (store->GetMessageHdrs(&hdrsList, login)) + { + printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str()); + return -1; + } + +std::vector::const_iterator it; +for (it = hdrsList.begin(); it != hdrsList.end(); ++it) + { + STG_MSG msg; + if (store->GetMessage(it->id, &msg, login) == 0) + { + messages.push_back(msg); + } + } + return 0; } //----------------------------------------------------------------------------- @@ -940,22 +956,18 @@ Run(); //----------------------------------------------------------------------------- int USER::WriteDetailStat(bool hard) { -printfd(__FILE__, "USER::WriteDetailedStat() - queue size = %d\n", traffStatQueue.size()); +printfd(__FILE__, "USER::WriteDetailedStat() - saved size = %d\n", traffStatSaved.second.size()); -if (!traffStatQueue.empty()) +if (!traffStatSaved.second.empty()) { - std::list >::iterator it; - for (it = traffStatQueue.begin(); it != traffStatQueue.end(); ++it) + if (store->WriteDetailedStat(traffStatSaved.second, traffStatSaved.first, login)) { - if (store->WriteDetailedStat(it->second, it->first, login)) - { - printfd(__FILE__, "USER::WriteDetailStat() - failed to write detail stat from queue\n"); - WriteServLog("Cannot write detail stat from queue (of size %d recs) for user %s.", traffStatQueue.size(), login.c_str()); - WriteServLog("%s", store->GetStrError().c_str()); - return -1; - } - traffStatQueue.erase(it++); + printfd(__FILE__, "USER::WriteDetailStat() - failed to write detail stat from queue\n"); + WriteServLog("Cannot write detail stat from queue (of size %d recs) for user %s.", traffStatSaved.second.size(), login.c_str()); + WriteServLog("%s", store->GetStrError().c_str()); + return -1; } + traffStatSaved.second.erase(traffStatSaved.second.begin(), traffStatSaved.second.end()); } TRAFF_STAT ts; @@ -977,8 +989,11 @@ if (ts.size() && !disabledDetailStat) if (!hard) { printfd(__FILE__, "USER::WriteDetailStat() - pushing detail stat to queue\n"); - traffStatQueue.push_back(std::make_pair(lastWriteDeatiledStat, ts)); + STG_LOCKER lock(&mutex, __FILE__, __LINE__); + traffStatSaved.second.swap(ts); + traffStatSaved.first = lastWriteDeatiledStat; } + return -1; } } lastWriteDeatiledStat = stgTime; @@ -1157,6 +1172,7 @@ if (SendMessage(*msg) == 0) WriteServLog("%s", store->GetStrError().c_str()); return -1; } + messages.push_back(*msg); } } else @@ -1169,6 +1185,7 @@ else WriteServLog("%s", store->GetStrError().c_str()); return -1; } + messages.push_back(*msg); } return 0; } @@ -1199,7 +1216,7 @@ int USER::ScanMessage() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -vector hdrsList; +/*vector hdrsList; if (store->GetMessageHdrs(&hdrsList, login)) { @@ -1244,7 +1261,38 @@ for (unsigned i = 0; i < hdrsList.size(); i++) WriteServLog("%s", store->GetStrError().c_str()); } } + }*/ + +std::list::iterator it(messages.begin()); +while (it != messages.end()) + { + if (SendMessage(*it)) + { + break; + } + it->header.repeat--; + if (it->header.repeat < 0) + { + printfd(__FILE__, "DelMessage\n"); + store->DelMessage(it->header.id, login); + messages.erase(it++); + } + else + { + #ifndef DEBUG + //TODO: gcc v. 4.x generate ICE on x86_64 + it->header.lastSendTime = time(NULL); + #else + it->header.lastSendTime = stgTime; + #endif + if (store->EditMessage(*it, login)) + { + printfd(__FILE__, "EditMessage Error %s\n", store->GetStrError().c_str()); + } + ++it; + } } + return 0; } //-----------------------------------------------------------------------------