diff options
Diffstat (limited to 'NT/src/rotord.h')
| -rw-r--r-- | NT/src/rotord.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/NT/src/rotord.h b/NT/src/rotord.h new file mode 100644 index 0000000..659bb74 --- /dev/null +++ b/NT/src/rotord.h @@ -0,0 +1,145 @@ +#include "Poco/Net/HTTPServer.h" +#include "Poco/Net/HTTPRequestHandler.h" +#include "Poco/Net/HTTPRequestHandlerFactory.h" +#include "Poco/Net/HTTPServerParams.h" +#include "Poco/Net/HTTPServerRequest.h" +#include "Poco/Net/HTTPServerResponse.h" +#include "Poco/Net/HTTPServerParams.h" +#include "Poco/Net/ServerSocket.h" +#include "Poco/UUIDGenerator.h" +#include "Poco/Timestamp.h" +#include "Poco/DateTimeFormatter.h" +#include "Poco/DateTimeFormat.h" +#include "Poco/Exception.h" +#include "Poco/ThreadPool.h" +#include "Poco/Task.h" +#include "Poco/NotificationCenter.h" +#include "Poco/TaskManager.h" +#include "Poco/Util/ServerApplication.h" +#include "Poco/Util/Option.h" +#include "Poco/Util/OptionSet.h" +#include "Poco/Util/HelpFormatter.h" +#include "Poco/FileStream.h" +#include "Poco/StreamCopier.h" +#include "Poco/Net/HTTPStreamFactory.h" +#include "Poco/StringTokenizer.h" + +#include <iostream> + +#include <sstream> +#include "Poco/URI.h" +#include "Poco/Channel.h" +#include "Poco/SplitterChannel.h" +#include "Poco/ConsoleChannel.h" +#include "Poco/FormattingChannel.h" +#include "Poco/FileChannel.h" +#include "Poco/Message.h" +#include "Poco/Formatter.h" +#include "Poco/PatternFormatter.h" +#include "Poco/AutoPtr.h" + + + +using Poco::Net::ServerSocket; +using Poco::Net::HTTPResponse; +using Poco::Net::HTTPRequestHandler; +using Poco::Net::HTTPRequestHandlerFactory; +using Poco::Net::HTTPServer; +using Poco::Net::HTTPServerRequest; +using Poco::Net::HTTPServerResponse; +using Poco::Net::HTTPServerParams; +using Poco::Timestamp; +using Poco::DateTimeFormatter; +using Poco::DateTimeFormat; +using Poco::ThreadPool; +using Poco::TaskManager; +using Poco::Util::ServerApplication; +using Poco::Util::Application; +using Poco::Util::Option; +using Poco::Util::OptionSet; +using Poco::Util::OptionCallback; +using Poco::Util::HelpFormatter; +using Poco::Net::HTTPStreamFactory; +using Poco::Logger; +using Poco::Channel; +using Poco::SplitterChannel; +using Poco::ConsoleChannel; +using Poco::FormattingChannel; +using Poco::Formatter; +using Poco::PatternFormatter; +using Poco::FileChannel; +using Poco::Message; +using Poco::AutoPtr; + + +#include "rendercontext.h" +#include "xmlIO.h" + +class RenderContextHandler: public HTTPRequestHandler +{ + public: + RenderContextHandler(string _content,HTTPServerResponse::HTTPStatus _status); + void handleRequest(HTTPServerRequest& request,HTTPServerResponse& response); + private: + std::string content; + HTTPServerResponse::HTTPStatus status; +}; + + +class RotorRequestHandlerFactory: public HTTPRequestHandlerFactory +{ + public: + RotorRequestHandlerFactory(): manager(pool){ + xmlIO xml; + if(xml.loadFile("settings.xml") ){ + media_dir=xml.getAttribute("Rotor","media_dir","",0); + thumbnail_dir=xml.getAttribute("Rotor","thumbnail_dir","",0); + } + pool.addCapacity(300); + //g_type_init(); //required on server for rsvg library init - removed until rsvg restored + //manager=Poco::TaskManager(pool); + } + HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request); + private: + + std::unordered_map<std::string,Rotor::Render_context> context; + std::unordered_map<std::string,std::string> renders; + Poco::UUIDGenerator idGen; + Poco::TaskManager manager; + Poco::ThreadPool pool; + std::string media_dir; + std::string thumbnail_dir; +}; + +class RotorServer: public Poco::Util::ServerApplication +{ + public: + RotorServer(); + ~RotorServer(); + protected: + void initialize(Application& self); + void uninitialize(); + void defineOptions(OptionSet& options); + void handleHelp(const std::string& name, const std::string& value); + int main(const std::vector<std::string>& args); + private: + bool _helpRequested; +}; + +RotorServer app; //needs to be global for logger + +int main(int argc, char** argv) +{ + AutoPtr<SplitterChannel> splitterChannel(new SplitterChannel()); + AutoPtr<Channel> consoleChannel(new ConsoleChannel()); + AutoPtr<Channel> fileChannel(new FileChannel("Rotord.log")); + splitterChannel->addChannel(consoleChannel); + splitterChannel->addChannel(fileChannel); + AutoPtr<Formatter> formatter(new PatternFormatter("%d-%m-%Y %H:%M:%S %s: %t")); + AutoPtr<Channel> formattingChannel(new FormattingChannel(formatter, splitterChannel)); + Logger& logger = Logger::create("Rotor", formattingChannel, Message::PRIO_TRACE); + logger.information("starting rendering daemon"); + HTTPStreamFactory::registerFactory(); + + return app.run(argc, argv); +} |
