2ddfbcda557616cb8eb23ad520f0928c7c113227
[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         try\r
29         {\r
30                 Poco::Net::ServerSocket sock(m_listenport);\r
31                 Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
32                 pParams->setMaxQueued(30);\r
33                 pParams->setMaxThreads(5);\r
34                 Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory,sock,pParams);\r
35 \r
36                 srv.start();\r
37                 m_log->trace("Started HTTPServer");\r
38 \r
39                 do\r
40                 {\r
41                         Poco::Thread::sleep(1000);\r
42                 }while(!IsCancelled());\r
43 \r
44                 m_log->trace("Trying to stop HTTPServer");\r
45                 srv.stop();\r
46                 m_log->trace("Stopped HTTPServer");\r
47                 \r
48                 m_log->trace("Waiting for current HTTP requests to finish");\r
49                 while(srv.currentConnections()>0)\r
50                 {\r
51                         Poco::Thread::sleep(500);\r
52                 }\r
53         }\r
54         catch(Poco::Exception &e)\r
55         {\r
56                 m_log->fatal("HTTPThread::run caught "+e.displayText());\r
57         }\r
58         catch(...)\r
59         {\r
60                 m_log->fatal("HTTPThread::run caught unknown exception");\r
61         }\r
62 \r
63         m_log->debug("HTTPThread::run thread exiting.");\r
64 \r
65 }\r