From 41cd057bb981b3dc00cc527485c48549a912cb2b Mon Sep 17 00:00:00 2001 From: Maxim Mamontov Date: Thu, 27 Jan 2011 13:07:27 +0200 Subject: [PATCH] =?utf8?q?=D0=9D=D0=B5=D0=B2=D0=B5=D0=BB=D0=B8=D1=87=D0=BA?= =?utf8?q?=D0=B8=D0=B9=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80?= =?utf8?q?=D0=B8=D0=BD=D0=B3=20=D1=80=D0=BE=D0=B1=D0=BE=D1=82=D0=B8=20?= =?utf8?q?=D0=B7=20=D0=BF=D0=BE=D0=B2=D1=96=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5?= =?utf8?q?=D0=BD=D0=BD=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/stg_message.h | 5 +++ projects/stargazer/user.cpp | 81 +++++++------------------------------ projects/stargazer/user.h | 4 +- 3 files changed, 22 insertions(+), 68 deletions(-) diff --git a/include/stg_message.h b/include/stg_message.h index 558100dd..16fe566f 100644 --- a/include/stg_message.h +++ b/include/stg_message.h @@ -43,6 +43,11 @@ struct STG_MSG { STG_MSG() {}; +time_t GetNextSendTime() const +{ +return header.lastSendTime + header.repeat * 60; +}; + STG_MSG_HDR header; std::string text; }; diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp index 267967d0..1b7d2f4c 100644 --- a/projects/stargazer/user.cpp +++ b/projects/stargazer/user.cpp @@ -1188,7 +1188,7 @@ else return 0; } //----------------------------------------------------------------------------- -int USER::SendMessage(const STG_MSG & msg) +int USER::SendMessage(STG_MSG & msg) const { // No lock `cause we are already locked from caller int ret = -1; @@ -1198,65 +1198,27 @@ while (it != authorizedBy.end()) if (!(*it++)->SendMessage(msg, currIP)) ret = 0; } +if (!ret) + { +#ifndef DEBUG + //TODO: gcc v. 4.x generate ICE on x86_64 + msg.header.lastSendTime = time(NULL); +#else + msg.header.lastSendTime = stgTime; +#endif + msg.header.repeat--; + } return ret; } //----------------------------------------------------------------------------- -int USER::ScanMessage() +void USER::ScanMessage() { // No lock `cause we are already locked from caller // We need not check for the authorizedBy `cause it has already checked by caller -/*vector hdrsList; - -if (store->GetMessageHdrs(&hdrsList, login)) - { - printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str()); - return -1; - } - -for (unsigned i = 0; i < hdrsList.size(); i++) - { - - if (hdrsList[i].lastSendTime + hdrsList[i].repeatPeriod * 60 < (unsigned)stgTime) - { - STG_MSG msg; - if (store->GetMessage(hdrsList[i].id, &msg, login) == 0) - { - if (SendMessage(msg) == 0) - { - msg.header.repeat--; - if (msg.header.repeat < 0) - { - printfd(__FILE__, "DelMessage\n"); - store->DelMessage(hdrsList[i].id, login); - } - else - { - #ifndef DEBUG - //TODO: gcc v. 4.x generate ICE on x86_64 - msg.header.lastSendTime = time(NULL); - #else - msg.header.lastSendTime = stgTime; - #endif - if (store->EditMessage(msg, login)) - { - printfd(__FILE__, "EditMessage Error %s\n", store->GetStrError().c_str()); - } - } - } - } - else - { - WriteServLog("Cannot get message for user %s.", login.c_str()); - WriteServLog("%s", store->GetStrError().c_str()); - } - } - }*/ - std::list::iterator it(messages.begin()); while (it != messages.end()) { - printfd(__FILE__, "Message timeout: %d, delta: %f\n", settings->GetMessageTimeout(), difftime(stgTime, it->header.creationTime)); if (settings->GetMessageTimeout() > 0 && difftime(stgTime, it->header.creationTime) > settings->GetMessageTimeout()) { @@ -1269,7 +1231,7 @@ while (it != messages.end()) messages.erase(it++); continue; } - if (static_cast(it->header.lastSendTime + it->header.repeatPeriod * 60) < stgTime) + if (it->GetNextSendTime() <= stgTime) { if (SendMessage(*it)) { @@ -1277,7 +1239,6 @@ while (it != messages.end()) ++it; continue; } - it->header.repeat--; if (it->header.repeat < 0) { if (store->DelMessage(it->header.id, login)) @@ -1285,31 +1246,19 @@ while (it != messages.end()) WriteServLog("Error deleting message: '%s'", store->GetStrError().c_str()); printfd(__FILE__, "Error deleting message: '%s'\n", store->GetStrError().c_str()); } - messages.erase(it++); + 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)) { WriteServLog("Error modifying message: '%s'", store->GetStrError().c_str()); printfd(__FILE__, "Error modifying message: '%s'\n", store->GetStrError().c_str()); } - ++it; } } - else - { - ++it; - } + ++it; } - -return 0; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- diff --git a/projects/stargazer/user.h b/projects/stargazer/user.h index 496baa72..3472ba4b 100644 --- a/projects/stargazer/user.h +++ b/projects/stargazer/user.h @@ -202,8 +202,8 @@ private: void Disconnect(bool fakeDisconnect, const std::string & reason); int SaveMonthStat(int month, int year); - int SendMessage(const STG_MSG & msg); - int ScanMessage(); + int SendMessage(STG_MSG & msg) const; + void ScanMessage(); time_t lastScanMessages; string login; -- 2.44.2