]> git.stg.codes - stg.git/commitdiff
Невеличкий рефакторинг роботи з повідомленнями
authorMaxim Mamontov <faust@gts.dp.ua>
Thu, 27 Jan 2011 11:07:27 +0000 (13:07 +0200)
committerMaxim Mamontov <faust@gts.dp.ua>
Thu, 27 Jan 2011 11:07:27 +0000 (13:07 +0200)
include/stg_message.h
projects/stargazer/user.cpp
projects/stargazer/user.h

index 558100dd555e24356156010042f8717577e90669..16fe566f662ef8b833c2df13d5a54132f29fc5e8 100644 (file)
@@ -43,6 +43,11 @@ struct STG_MSG
 {
 STG_MSG() {};
 
 {
 STG_MSG() {};
 
+time_t GetNextSendTime() const
+{
+return header.lastSendTime + header.repeat * 60;
+};
+
 STG_MSG_HDR header;
 std::string text;
 };
 STG_MSG_HDR header;
 std::string text;
 };
index 267967d085eaab6f181c0e71db4aa41142e7cc09..1b7d2f4c4210d57f185d65d87ab5a5ddd2de8a0a 100644 (file)
@@ -1188,7 +1188,7 @@ else
 return 0;
 }
 //-----------------------------------------------------------------------------
 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;
 {
 // 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 (!(*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;
 }
 //-----------------------------------------------------------------------------
 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
 
 {
 // No lock `cause we are already locked from caller
 // We need not check for the authorizedBy `cause it has already checked by caller
 
-/*vector<STG_MSG_HDR> 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<STG_MSG>::iterator it(messages.begin());
 while (it != messages.end())
     {
 std::list<STG_MSG>::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())
         {
     if (settings->GetMessageTimeout() > 0 &&
         difftime(stgTime, it->header.creationTime) > settings->GetMessageTimeout())
         {
@@ -1269,7 +1231,7 @@ while (it != messages.end())
         messages.erase(it++);
         continue;
         }
         messages.erase(it++);
         continue;
         }
-    if (static_cast<time_t>(it->header.lastSendTime + it->header.repeatPeriod * 60) < stgTime)
+    if (it->GetNextSendTime() <= stgTime)
         {
         if (SendMessage(*it))
             {
         {
         if (SendMessage(*it))
             {
@@ -1277,7 +1239,6 @@ while (it != messages.end())
             ++it;
             continue;
             }
             ++it;
             continue;
             }
-        it->header.repeat--;
         if (it->header.repeat < 0)
             {
             if (store->DelMessage(it->header.id, login))
         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());
                 }
                 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
             {
             }
         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());
                 }
             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;
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
index 496baa72d547f83c714b73deba594e7c684d9ef8..3472ba4b6334248bdcd4f65e3391ccb2953433b5 100644 (file)
@@ -202,8 +202,8 @@ private:
     void            Disconnect(bool fakeDisconnect, const std::string & reason);
     int             SaveMonthStat(int month, int year);
 
     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;
     time_t          lastScanMessages;
 
     string          login;