#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/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 #include #include "Poco/URI.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; #include "rotor.h" class RotorRequestHandler: public HTTPRequestHandler { public: RotorRequestHandler(const std::string& format); void handleRequest(HTTPServerRequest& request,HTTPServerResponse& response); private: std::string _format; }; class AudioAnalyserHandler: public HTTPRequestHandler { public: AudioAnalyserHandler(const vampHost::Settings& _settings); void handleRequest(HTTPServerRequest& request,HTTPServerResponse& response); private: vampHost::Settings settings; }; 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: HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request); private: std::unordered_map context; Poco::UUIDGenerator idGen; Poco::TaskManager manager; }; 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& args); private: bool _helpRequested; }; int main(int argc, char** argv) { HTTPStreamFactory::registerFactory(); RotorServer app; return app.run(argc, argv); }