X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/9e2edd39ec2cb1989f6261b1dc5e6c09373ee33d..1ed49c21260edc5b40aa2d0d4b8486bc1928f21b:/projects/stargazer/user.cpp?ds=sidebyside diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp index 48b8094c..3d9371fd 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; } //----------------------------------------------------------------------------- @@ -1137,7 +1153,18 @@ int USER::AddMessage(STG_MSG * msg) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -if (SendMessage(*msg) == 0) +if (SendMessage(*msg)) + { + if (store->AddMessage(msg, login)) + { + errorStr = store->GetStrError(); + WriteServLog("Error adding message: '%s'", errorStr.c_str()); + printfd(__FILE__, "Error adding message: '%s'\n", errorStr.c_str()); + return -1; + } + messages.push_back(*msg); + } +else { if (msg->header.repeat > 0) { @@ -1151,22 +1178,11 @@ if (SendMessage(*msg) == 0) if (store->AddMessage(msg, login)) { errorStr = store->GetStrError(); - STG_LOGGER & WriteServLog = GetStgLogger(); - WriteServLog("Error adding message %s", errorStr.c_str()); - WriteServLog("%s", store->GetStrError().c_str()); + WriteServLog("Error adding repeatable message: '%s'", errorStr.c_str()); + printfd(__FILE__, "Error adding repeatable message: '%s'\n", errorStr.c_str()); return -1; } - } - } -else - { - if (store->AddMessage(msg, login)) - { - errorStr = store->GetStrError(); - STG_LOGGER & WriteServLog = GetStgLogger(); - WriteServLog("Error adding message %s", errorStr.c_str()); - WriteServLog("%s", store->GetStrError().c_str()); - return -1; + messages.push_back(*msg); } } return 0; @@ -1174,31 +1190,23 @@ return 0; //----------------------------------------------------------------------------- int USER::SendMessage(const STG_MSG & msg) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); - -if (authorizedBy.empty()) - { - return -1; - } - +// No lock `cause we are already locked from caller int ret = -1; -set::iterator it; - -it = authorizedBy.begin(); +set::iterator it(authorizedBy.begin()); while (it != authorizedBy.end()) { - if ((*it)->SendMessage(msg, currIP) == 0) + if (!(*it++)->SendMessage(msg, currIP)) ret = 0; - ++it; } return ret; } //----------------------------------------------------------------------------- int USER::ScanMessage() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +// 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; +/*vector hdrsList; if (store->GetMessageHdrs(&hdrsList, login)) { @@ -1243,7 +1251,49 @@ 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 (static_cast(it->header.lastSendTime + it->header.repeatPeriod * 60) < stgTime) + { + if (SendMessage(*it)) + { + return -1; + } + it->header.repeat--; + if (it->header.repeat < 0) + { + if (store->DelMessage(it->header.id, login)) + { + WriteServLog("Error deleting message: '%s'", store->GetStrError().c_str()); + printfd(__FILE__, "Error deleting message: '%s'\n", store->GetStrError().c_str()); + } + 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; + } } + return 0; } //-----------------------------------------------------------------------------