version 0.1.10
[fms.git] / src / threadcontroller.cpp
1 #include "../include/threadcontroller.h"\r
2 #include "../include/option.h"\r
3 #include "../include/freenet/freenetmasterthread.h"\r
4 #include "../include/nntp/nntplistener.h"\r
5 #include "../include/http/httpthread.h"\r
6 \r
7 #ifdef XMEM\r
8         #include <xmem.h>\r
9 #endif\r
10 \r
11 ThreadController::~ThreadController()\r
12 {\r
13         ShutdownThreads();\r
14 }\r
15 \r
16 void ThreadController::ReadConfig()\r
17 {\r
18 \r
19         std::string tempval="";\r
20         Option::Instance()->Get("StartFreenetUpdater",tempval);\r
21         if(tempval=="true")\r
22         {\r
23                 m_startfreenet=true;\r
24         }\r
25         else\r
26         {\r
27                 m_startfreenet=false;\r
28         }\r
29 \r
30         tempval="";\r
31         Option::Instance()->Get("StartNNTP",tempval);\r
32         if(tempval=="true")\r
33         {\r
34                 m_startnntp=true;\r
35         }\r
36         else\r
37         {\r
38                 m_startnntp=false;\r
39         }\r
40 \r
41         tempval="";\r
42         Option::Instance()->Get("StartHTTP",tempval);\r
43         if(tempval=="true")\r
44         {\r
45                 m_starthttp=true;\r
46         }\r
47         else\r
48         {\r
49                 m_starthttp=false;\r
50         }\r
51 \r
52 }\r
53 \r
54 void ThreadController::RestartThreads()\r
55 {\r
56         m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::RestartThreads restarting threads.");\r
57         ShutdownThreads();\r
58         StartThreads();\r
59 }\r
60 \r
61 void ThreadController::ShutdownFreenetThread()\r
62 {\r
63         if(m_freenetthread)\r
64         {\r
65                 m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::ShutdownFreenetThread shutting down Freenet thread.");\r
66                 m_freenetthread->Cancel();\r
67                 m_freenetthread->Join();\r
68                 delete m_freenetthread;\r
69                 m_freenetthread=NULL;\r
70         }\r
71 }\r
72 \r
73 void ThreadController::ShutdownHTTPThread()\r
74 {\r
75         if(m_httpthread)\r
76         {\r
77                 m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::ShutdownHTTPThread shutting down HTTP thread.");\r
78                 m_httpthread->Cancel();\r
79                 m_httpthread->Join();\r
80                 delete m_httpthread;\r
81                 m_httpthread=NULL;\r
82         }\r
83 }\r
84 \r
85 void ThreadController::ShutdownNNTPThread()\r
86 {\r
87         if(m_nntpthread)\r
88         {\r
89                 m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::ShutdownNNTPThread shutting down NNTP thread.");\r
90                 m_nntpthread->Cancel();\r
91                 m_nntpthread->Join();\r
92                 delete m_nntpthread;\r
93                 m_nntpthread=NULL;\r
94         }\r
95 }\r
96 \r
97 void ThreadController::ShutdownThreads()\r
98 {\r
99         ShutdownFreenetThread();\r
100         ShutdownNNTPThread();\r
101         ShutdownHTTPThread();\r
102 }\r
103 \r
104 void ThreadController::StartFreenetThread()\r
105 {\r
106         m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::StartFreenetThread starting Freenet thread.");\r
107         m_freenetthread=new PThread::Thread(new FreenetMasterThread());\r
108 }\r
109 \r
110 void ThreadController::StartHTTPThread()\r
111 {\r
112         m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::StartHTTPThread starting HTTP thread.");\r
113         m_httpthread=new PThread::Thread(new HTTPThread());\r
114 }\r
115 \r
116 void ThreadController::StartNNTPThread()\r
117 {\r
118         m_log->WriteLog(LogFile::LOGLEVEL_INFO,"ThreadController::StartNNTPThread starting NNTP thread.");\r
119         m_nntpthread=new PThread::Thread(new NNTPListener());\r
120 }\r
121 \r
122 void ThreadController::StartThreads()\r
123 {\r
124         ReadConfig();\r
125 \r
126         if(m_startfreenet)\r
127         {\r
128                 StartFreenetThread();\r
129         }\r
130         if(m_startnntp)\r
131         {\r
132                 StartNNTPThread();\r
133         }\r
134         if(m_starthttp)\r
135         {\r
136                 StartHTTPThread();\r
137         }\r
138 }\r
139 \r