X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/c03710e5962e640d8a8e23cd9144e753ff282a50..bf69e959b3e75cb3eb3748e93df9dcfe5b82aa17:/projects/stargazer/user.cpp diff --git a/projects/stargazer/user.cpp b/projects/stargazer/user.cpp index b68c632a..267967d0 100644 --- a/projects/stargazer/user.cpp +++ b/projects/stargazer/user.cpp @@ -605,7 +605,7 @@ void USER::Run() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); -if (stgTime - lastWriteStat > settings->GetStatWritePeriod()) +if (stgTime > static_cast(lastWriteStat + settings->GetStatWritePeriod())) { printfd(__FILE__, "USER::WriteStat user=%s\n", GetLogin().c_str()); WriteStat(); @@ -1158,9 +1158,8 @@ if (SendMessage(*msg)) 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 message: '%s'", errorStr.c_str()); + printfd(__FILE__, "Error adding message: '%s'\n", errorStr.c_str()); return -1; } messages.push_back(*msg); @@ -1179,9 +1178,8 @@ 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()); + WriteServLog("Error adding repeatable message: '%s'", errorStr.c_str()); + printfd(__FILE__, "Error adding repeatable message: '%s'\n", errorStr.c_str()); return -1; } messages.push_back(*msg); @@ -1258,29 +1256,55 @@ for (unsigned i = 0; i < hdrsList.size(); i++) std::list::iterator it(messages.begin()); while (it != messages.end()) { - if (SendMessage(*it)) - { - return -1; - } - it->header.repeat--; - if (it->header.repeat < 0) + 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()) { - printfd(__FILE__, "DelMessage\n"); - store->DelMessage(it->header.id, login); + // Timeout exceeded + 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++); + continue; } - else + if (static_cast(it->header.lastSendTime + it->header.repeatPeriod * 60) < stgTime) { - #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)) + if (SendMessage(*it)) { - printfd(__FILE__, "EditMessage Error %s\n", store->GetStrError().c_str()); + // We need to check all messages in queue for timeout + ++it; + continue; } + 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; } }