version 0.1.9
[fms.git] / src / threadcontroller.cpp
diff --git a/src/threadcontroller.cpp b/src/threadcontroller.cpp
new file mode 100644 (file)
index 0000000..8bfb7b5
--- /dev/null
@@ -0,0 +1,132 @@
+#include "../include/threadcontroller.h"\r
+#include "../include/option.h"\r
+#include "../include/freenet/freenetmasterthread.h"\r
+#include "../include/nntp/nntplistener.h"\r
+#include "../include/http/httpthread.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+ThreadController::~ThreadController()\r
+{\r
+       ShutdownThreads();\r
+}\r
+\r
+void ThreadController::ReadConfig()\r
+{\r
+\r
+       std::string tempval="";\r
+       Option::Instance()->Get("StartFreenetUpdater",tempval);\r
+       if(tempval=="true")\r
+       {\r
+               m_startfreenet=true;\r
+       }\r
+       else\r
+       {\r
+               m_startfreenet=false;\r
+       }\r
+\r
+       tempval="";\r
+       Option::Instance()->Get("StartNNTP",tempval);\r
+       if(tempval=="true")\r
+       {\r
+               m_startnntp=true;\r
+       }\r
+       else\r
+       {\r
+               m_startnntp=false;\r
+       }\r
+\r
+       tempval="";\r
+       Option::Instance()->Get("StartHHTP",tempval);\r
+       if(tempval=="true")\r
+       {\r
+               m_starthttp=true;\r
+       }\r
+       else\r
+       {\r
+               m_starthttp=false;\r
+       }\r
+\r
+}\r
+\r
+void ThreadController::RestartThreads()\r
+{\r
+       ShutdownThreads();\r
+       StartThreads();\r
+}\r
+\r
+void ThreadController::ShutdownFreenetThread()\r
+{\r
+       if(m_freenetthread)\r
+       {\r
+               m_freenetthread->Cancel();\r
+               m_freenetthread->Join();\r
+               delete m_freenetthread;\r
+               m_freenetthread=NULL;\r
+       }\r
+}\r
+\r
+void ThreadController::ShutdownHTTPThread()\r
+{\r
+       if(m_httpthread)\r
+       {\r
+               m_httpthread->Cancel();\r
+               m_httpthread->Join();\r
+               delete m_httpthread;\r
+               m_httpthread=NULL;\r
+       }\r
+}\r
+\r
+void ThreadController::ShutdownNNTPThread()\r
+{\r
+       if(m_nntpthread)\r
+       {\r
+               m_nntpthread->Cancel();\r
+               m_nntpthread->Join();\r
+               delete m_nntpthread;\r
+               m_nntpthread=NULL;\r
+       }\r
+}\r
+\r
+void ThreadController::ShutdownThreads()\r
+{\r
+       ShutdownFreenetThread();\r
+       ShutdownNNTPThread();\r
+       ShutdownHTTPThread();\r
+}\r
+\r
+void ThreadController::StartFreenetThread()\r
+{\r
+       m_freenetthread=new PThread::Thread(new FreenetMasterThread());\r
+}\r
+\r
+void ThreadController::StartHTTPThread()\r
+{\r
+       m_httpthread=new PThread::Thread(new HTTPThread());\r
+}\r
+\r
+void ThreadController::StartNNTPThread()\r
+{\r
+       m_nntpthread=new PThread::Thread(new NNTPListener());\r
+}\r
+\r
+void ThreadController::StartThreads()\r
+{\r
+       ReadConfig();\r
+\r
+       if(m_startfreenet)\r
+       {\r
+               StartFreenetThread();\r
+       }\r
+       if(m_startnntp)\r
+       {\r
+               StartNNTPThread();\r
+       }\r
+       if(m_starthttp)\r
+       {\r
+               StartHTTPThread();\r
+       }\r
+}\r
+\r