version 0.3.4
[fms.git] / src / http / httpthread.cpp
1 #include "../../include/http/httpthread.h"\r
2 #include "../../include/http/fmshttprequesthandlerfactory.h"\r
3 #include "../../include/option.h"\r
4 #include "../../include/stringfunctions.h"\r
5 \r
6 #include <Poco/Net/ServerSocket.h>\r
7 #include <Poco/Net/HTTPServer.h>\r
8 #include <Poco/Net/HTTPServerParams.h>\r
9 \r
10 #include <iostream>\r
11 \r
12 #ifdef XMEM\r
13         #include <xmem.h>\r
14 #endif\r
15 \r
16 HTTPThread::HTTPThread()\r
17 {\r
18         m_listenport=8080;\r
19         std::string portstr;\r
20         Option::Instance()->Get("HTTPListenPort",portstr);\r
21         StringFunctions::Convert(portstr,m_listenport);\r
22 }\r
23 \r
24 void HTTPThread::run()\r
25 {\r
26         m_log->debug("HTTPThread::run thread started.");\r
27 \r
28         Poco::Net::ServerSocket sock(m_listenport);\r
29         Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
30         pParams->setMaxQueued(30);\r
31         pParams->setMaxThreads(5);\r
32         Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory,sock,pParams);\r
33 \r
34         srv.start();\r
35         m_log->trace("Started HTTPServer");\r
36 \r
37         do\r
38         {\r
39                 Poco::Thread::sleep(1000);\r
40         }while(!IsCancelled());\r
41 \r
42         m_log->trace("Trying to stop HTTPServer");\r
43         srv.stop();\r
44         m_log->trace("Stopped HTTPServer");\r
45         \r
46         m_log->trace("Waiting for current HTTP requests to finish");\r
47         while(srv.currentConnections()>0)\r
48         {\r
49                 Poco::Thread::sleep(500);\r
50         }\r
51 \r
52         m_log->debug("HTTPThread::run thread exiting.");\r
53 \r
54 }\r