]> git.stg.codes - stg.git/commitdiff
Реалізовано внутрішню чергу повідомлень і її синхронізацію з базою
authorMaxim Mamontov <faust@gts.dp.ua>
Wed, 5 Jan 2011 14:51:47 +0000 (16:51 +0200)
committerMaxim Mamontov <faust@gts.dp.ua>
Wed, 5 Jan 2011 14:51:47 +0000 (16:51 +0200)
projects/stargazer/user.cpp
projects/stargazer/user.h

index 46f6848bddea3ff116abbfc5315225c15390fb19..93fd66dc63a3cc4de3c154e8e40520e7c917d896 100644 (file)
@@ -255,6 +255,24 @@ if (tariff == NULL)
     return -1;
     }
 
     return -1;
     }
 
+std::vector<STG_MSG_HDR> hdrsList;
+
+if (store->GetMessageHdrs(&hdrsList, login))
+    {
+    printfd(__FILE__, "Error GetMessageHdrs %s\n", store->GetStrError().c_str());
+    return -1;
+    }
+
+std::vector<STG_MSG_HDR>::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;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
@@ -1154,6 +1172,7 @@ if (SendMessage(*msg) == 0)
             WriteServLog("%s", store->GetStrError().c_str());
             return -1;
             }
             WriteServLog("%s", store->GetStrError().c_str());
             return -1;
             }
+        messages.push_back(*msg);
         }
     }
 else
         }
     }
 else
@@ -1166,6 +1185,7 @@ else
         WriteServLog("%s", store->GetStrError().c_str());
         return -1;
         }
         WriteServLog("%s", store->GetStrError().c_str());
         return -1;
         }
+    messages.push_back(*msg);
     }
 return 0;
 }
     }
 return 0;
 }
@@ -1196,7 +1216,7 @@ int USER::ScanMessage()
 {
 STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 
 {
 STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 
-vector<STG_MSG_HDR> hdrsList;
+/*vector<STG_MSG_HDR> hdrsList;
 
 if (store->GetMessageHdrs(&hdrsList, login))
     {
 
 if (store->GetMessageHdrs(&hdrsList, login))
     {
@@ -1241,7 +1261,38 @@ for (unsigned i = 0; i < hdrsList.size(); i++)
             WriteServLog("%s", store->GetStrError().c_str());
             }
         }
             WriteServLog("%s", store->GetStrError().c_str());
             }
         }
+    }*/
+
+std::list<STG_MSG>::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->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;
 }
 //-----------------------------------------------------------------------------
 return 0;
 }
 //-----------------------------------------------------------------------------
index 8b0c4dbacee8c6b7bc827fe15a9700a802f79a23..496baa72d547f83c714b73deba594e7c684d9ef8 100644 (file)
@@ -241,6 +241,8 @@ private:
 
     const map<uint32_t, user_iter> * ipIndex;
 
 
     const map<uint32_t, user_iter> * ipIndex;
 
+    list<STG_MSG> messages;
+
     bool            deleted;
 
     time_t          lastWriteStat;           // ÷ÒÅÍÑ ÐÏÓÌÅÄÎÅÊ ÚÁÐÉÓÉ ÓÔÁÔÉÓÔÉËÉ
     bool            deleted;
 
     time_t          lastWriteStat;           // ÷ÒÅÍÑ ÐÏÓÌÅÄÎÅÊ ÚÁÐÉÓÉ ÓÔÁÔÉÓÔÉËÉ