summaryrefslogtreecommitdiff
path: root/rotord/rotord.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/rotord.cpp')
-rw-r--r--rotord/rotord.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/rotord/rotord.cpp b/rotord/rotord.cpp
new file mode 100644
index 0000000..ccb770b
--- /dev/null
+++ b/rotord/rotord.cpp
@@ -0,0 +1,88 @@
+#include "rotord.h"
+
+RotorRequestHandler::RotorRequestHandler(const std::string& format): _format(format){
+}
+
+void RotorRequestHandler::handleRequest(HTTPServerRequest& request,HTTPServerResponse& response) {
+
+ Timestamp now;
+ std::string dt(DateTimeFormatter::format(now, _format));
+
+ response.setChunkedTransferEncoding(true);
+ response.setContentType("text/html");
+
+ std::ostream& ostr = response.send();
+ ostr << "<html><head><title>RotorServer powered by "
+ "POCO C++ Libraries</title>";
+ ostr << "<meta http-equiv=\"refresh\" content=\"1\"></head>";
+ ostr << "<body><p style=\"text-align: center; "
+ "font-size: 48px;\">";
+ ostr << dt;
+ ostr << "</p></body></html>";
+}
+
+
+RotorRequestHandlerFactory::RotorRequestHandlerFactory(const std::string& format):_format(format){
+}
+
+HTTPRequestHandler* RotorRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& request){
+ Application& app = Application::instance();
+ app.logger().information("Request from "+ request.clientAddress().toString()+": "+request.getURI());
+ if (request.getURI() == "/")
+ return new RotorRequestHandler(_format);
+ else
+ return 0;
+}
+
+
+RotorServer::RotorServer(): _helpRequested(false)
+{
+}
+
+RotorServer::~RotorServer()
+{
+}
+
+void RotorServer::initialize(Application& self){
+ loadConfiguration();
+ ServerApplication::initialize(self);
+}
+
+void RotorServer::uninitialize(){
+ ServerApplication::uninitialize();
+}
+
+void RotorServer::defineOptions(OptionSet& options) {
+ ServerApplication::defineOptions(options);
+ options.addOption(
+ Option("help", "h", "display argument help information")
+ .required(false)
+ .repeatable(false)
+ .callback(OptionCallback<RotorServer>(this, &RotorServer::handleHelp)
+ )
+ );
+}
+
+void RotorServer::handleHelp(const std::string& name, const std::string& value){
+ HelpFormatter helpFormatter(options());
+ helpFormatter.setCommand(commandName());
+ helpFormatter.setUsage("OPTIONS");
+ helpFormatter.setHeader(
+ "Rotor");
+ helpFormatter.format(std::cout);
+ stopOptionsProcessing();
+ _helpRequested = true;
+}
+
+int RotorServer::main(const std::vector<std::string>& args){
+ if (!_helpRequested) {
+ unsigned short port = (unsigned short) config().getInt("port", 9980);
+ std::string format(config().getString("format", DateTimeFormat::SORTABLE_FORMAT));
+ ServerSocket svs(port);
+ HTTPServer srv(new RotorRequestHandlerFactory(format), svs, new HTTPServerParams);
+ srv.start();
+ waitForTerminationRequest();
+ srv.stop();
+ }
+ return Application::EXIT_OK;
+}