version 0.3.29
[fms.git] / include / freenet / iindexinserter.h
index ccf1cd5..2135e45 100644 (file)
@@ -4,23 +4,31 @@
 #include "../idatabase.h"\r
 #include "../ilogger.h"\r
 #include "../option.h"\r
-#include "../datetime.h"\r
 #include "../stringfunctions.h"\r
 #include "ifreenetregistrable.h"\r
 #include "ifcpconnected.h"\r
 #include "ifcpmessagehandler.h"\r
 #include "iperiodicprocessor.h"\r
 \r
+#include <Poco/DateTime.h>\r
+#include <Poco/Timestamp.h>\r
+#include <Poco/Timespan.h>\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
 template <class IDTYPE>\r
 class IIndexInserter:public IFreenetRegistrable,public IFCPConnected,public IFCPMessageHandler,public IPeriodicProcessor,public IDatabase,public ILogger\r
 {\r
 public:\r
-       IIndexInserter();\r
-       IIndexInserter(FCPv2 *fcp);\r
+       IIndexInserter(SQLite3DB::DB *db);\r
+       IIndexInserter(SQLite3DB::DB *db, FCPv2::Connection *fcp);\r
+       virtual ~IIndexInserter()               {}\r
 \r
        virtual void FCPConnected();\r
        virtual void FCPDisconnected();\r
-       virtual const bool HandleMessage(FCPMessage &message);\r
+       virtual const bool HandleMessage(FCPv2::Message &message);\r
 \r
        virtual void Process();\r
 \r
@@ -29,28 +37,28 @@ public:
 protected:\r
        void InitializeIIndexInserter();\r
        virtual void Initialize()=0;            // initialize m_fcpuniquename\r
-       virtual const bool HandlePutSuccessful(FCPMessage &message)=0;\r
-       virtual const bool HandlePutFailed(FCPMessage &message)=0;\r
-       virtual void StartInsert(const IDTYPE &id)=0;\r
+       virtual const bool HandlePutSuccessful(FCPv2::Message &message)=0;\r
+       virtual const bool HandlePutFailed(FCPv2::Message &message)=0;\r
+       virtual const bool StartInsert(const IDTYPE &id)=0;\r
        virtual void CheckForNeededInsert()=0;\r
        virtual void RemoveFromInsertList(const IDTYPE id);\r
 \r
        std::vector<IDTYPE> m_inserting;                // list of ids we are inserting\r
        std::string m_messagebase;\r
-       DateTime m_lastchecked;\r
+       Poco::DateTime m_lastchecked;\r
 \r
        // these MUST be populated by child class\r
        std::string m_fcpuniquename;\r
 };\r
 \r
 template <class IDTYPE>\r
-IIndexInserter<IDTYPE>::IIndexInserter()\r
+IIndexInserter<IDTYPE>::IIndexInserter(SQLite3DB::DB *db):IDatabase(db)\r
 {\r
        InitializeIIndexInserter();\r
 }\r
 \r
 template <class IDTYPE>\r
-IIndexInserter<IDTYPE>::IIndexInserter(FCPv2 *fcp):IFCPConnected(fcp)\r
+IIndexInserter<IDTYPE>::IIndexInserter(SQLite3DB::DB *db, FCPv2::Connection *fcp):IDatabase(db),IFCPConnected(fcp)\r
 {\r
        InitializeIIndexInserter();\r
 }\r
@@ -61,11 +69,11 @@ void IIndexInserter<IDTYPE>::FCPConnected()
        // make sure variables have been initialized by the derived class\r
        if(m_fcpuniquename=="")\r
        {\r
-               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"IIndexInserter<IDTYPE>::FCPConnected fcpuniquename not initialized correctly!");\r
+               m_log->fatal("IIndexInserter<IDTYPE>::FCPConnected fcpuniquename not initialized correctly!");\r
        }\r
        if(m_fcpuniquename.find("|")!=std::string::npos)\r
        {\r
-               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"IIndexInserter<IDTYPE>::FCPConnected fcpuniquename contains | character!  This is not a valid character!");\r
+               m_log->fatal("IIndexInserter<IDTYPE>::FCPConnected fcpuniquename : "+m_fcpuniquename+" contains | character!  This is not a valid character!");\r
        }\r
 \r
        m_inserting.clear();\r
@@ -78,11 +86,13 @@ void IIndexInserter<IDTYPE>::FCPDisconnected()
 }\r
 \r
 template <class IDTYPE>\r
-const bool IIndexInserter<IDTYPE>::HandleMessage(FCPMessage &message)\r
+const bool IIndexInserter<IDTYPE>::HandleMessage(FCPv2::Message &message)\r
 {\r
 \r
        if(message["Identifier"].find(m_fcpuniquename)==0)\r
        {\r
+               m_log->trace("IIndexInserter<IDTYPE>::HandleMessage "+m_fcpuniquename+" received "+message.GetName()+"  ID="+message["Identifier"]+"  URI="+message["URI"]);\r
+\r
                if(message.GetName()=="URIGenerated")\r
                {\r
                        return true;\r
@@ -106,6 +116,7 @@ const bool IIndexInserter<IDTYPE>::HandleMessage(FCPMessage &message)
                        StringFunctions::Split(message["Identifier"],"|",idparts);\r
                        StringFunctions::Convert(idparts[1],id);\r
                        RemoveFromInsertList(id);\r
+                       m_log->debug("IIndexInserter<IDTYPE>::HandleMessage IdentifierCollision for "+m_fcpuniquename+" "+message["Identifier"]);\r
                        return true;\r
                }\r
        }\r
@@ -116,18 +127,18 @@ const bool IIndexInserter<IDTYPE>::HandleMessage(FCPMessage &message)
 template <class IDTYPE>\r
 void IIndexInserter<IDTYPE>::InitializeIIndexInserter()\r
 {\r
+       Option option(m_db);\r
        m_fcpuniquename="";\r
-       Option::instance()->Get("MessageBase",m_messagebase);\r
-       m_lastchecked.SetToGMTime();\r
+       option.Get("MessageBase",m_messagebase);\r
+       m_lastchecked=Poco::Timestamp();\r
 }\r
 \r
 template <class IDTYPE>\r
 void IIndexInserter<IDTYPE>::Process()\r
 {\r
-       DateTime now;\r
-       now.SetToGMTime();\r
+       Poco::DateTime now;\r
 \r
-       if(m_lastchecked<(now-(1.0/1440.0)))\r
+       if(m_lastchecked<(now-Poco::Timespan(0,0,1,0,0)))\r
        {\r
                CheckForNeededInsert();\r
                m_lastchecked=now;\r