version 0.3.29
[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 }\r
20 \r
21 void HTTPThread::run()\r
22 {\r
23         m_log->debug("HTTPThread::run thread started.");\r
24 \r
25         LoadDatabase();\r
26         Option option(m_db);\r
27 \r
28         std::string portstr("8080");\r
29         option.Get("HTTPListenPort",portstr);\r
30         StringFunctions::Convert(portstr,m_listenport);\r
31 \r
32         try\r
33         {\r
34                 Poco::Net::ServerSocket sock(m_listenport);\r
35                 Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
36                 pParams->setMaxQueued(30);\r
37                 pParams->setMaxThreads(5);\r
38                 Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory(m_db),sock,pParams);\r
39 \r
40                 srv.start();\r
41                 m_log->trace("Started HTTPServer");\r
42 \r
43                 do\r
44                 {\r
45                         Poco::Thread::sleep(1000);\r
46                 }while(!IsCancelled());\r
47 \r
48                 m_log->trace("Trying to stop HTTPServer");\r
49                 srv.stop();\r
50                 m_log->trace("Stopped HTTPServer");\r
51                 \r
52                 m_log->trace("Waiting for current HTTP requests to finish");\r
53                 while(srv.currentConnections()>0)\r
54                 {\r
55                         Poco::Thread::sleep(500);\r
56                 }\r
57         }\r
58         catch(Poco::Exception &e)\r
59         {\r
60                 m_log->fatal("HTTPThread::run caught "+e.displayText());\r
61         }\r
62         catch(...)\r
63         {\r
64                 m_log->fatal("HTTPThread::run caught unknown exception");\r
65         }\r
66 \r
67         m_log->debug("HTTPThread::run thread exiting.");\r
68 \r
69 }\r