summaryrefslogtreecommitdiff
path: root/processmodel/processmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'processmodel/processmodel.cpp')
-rw-r--r--processmodel/processmodel.cpp296
1 files changed, 0 insertions, 296 deletions
diff --git a/processmodel/processmodel.cpp b/processmodel/processmodel.cpp
deleted file mode 100644
index ec78099..0000000
--- a/processmodel/processmodel.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-#include "processmodel.h"
-
-//1. make a basic executable that represents a render context
-//get message passing going
-//incorporate in REST server
-//fill in the details
-
-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 << "</head>";
- ostr << "<body><p style=\"text-align: center; "
- "font-size: 48px;\">";
- ostr << dt;
- ostr << "</p></body></html>";
-}
-
-
-AudioAnalyserHandler::AudioAnalyserHandler(const vampHost::Settings& _settings): settings(_settings){
-}
-
-void AudioAnalyserHandler::handleRequest(HTTPServerRequest& request,HTTPServerResponse& response) {
-
- response.setChunkedTransferEncoding(true);
- response.setContentType("text/html");
-
- //string audioData=vampHost::runPlugin();
-
- std::ostream& ostr = response.send();
- ostr << "<html><head><title>RotorServer powered by "
- "POCO C++ Libraries</title>";
- ostr << "</head>";
- ostr << "<body><p style=\"text-align: center; "
- "font-size: 48px;\">";
- vampHost::runPlugin("",settings.soname,settings.filtername, "",0, settings.inputFile, ostr,true);
- ostr << "</p></body></html>";
-}
-
-RenderContextHandler::RenderContextHandler(const std::string _content,const HTTPServerResponse::HTTPStatus _status){
- content=_content;
- status=_status;
-}
-
-
-void RenderContextHandler::handleRequest(HTTPServerRequest& request,HTTPServerResponse& response) {
-
- response.setChunkedTransferEncoding(true);
- response.setContentType("text/html");
- response.setStatus(status);
-
- std::ostream& ostr = response.send();
-
- ostr << "<?xml version='1.0' encoding='ISO-8859-1'?>\n";
- ostr << content;
-
-}
-
-
-HTTPRequestHandler* RotorRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& request){
- Application& app = Application::instance();
-
- Poco::URI theuri=Poco::URI(request.getURI());
- std::vector <std::string> command;
- theuri.getPathSegments(command);
-
- app.logger().information(request.clientAddress().toString()+" "+request.getMethod());
-
- string content="";
- HTTPResponse::HTTPStatus status=HTTPResponse::HTTP_BAD_REQUEST; //by default
-
- std::string body;
- std::ostringstream os;
- os<<request.stream().rdbuf();
- body=os.str();
-
- /*
-
- if (command.size()) {
- if (command[0]=="new") {
- if (request.getMethod()=="GET") {
- string sID=idGen.createOne().toString(); //create() seems to cause problems
- //Creates a new time-based UUID, using the MAC address of one of the system's ethernet adapters.
- //Throws a SystemException if no MAC address can be obtained.
- //
- //seems to hang, to me
- cerr << "Rotor: starting thread "<< sID << endl;
- manager.start(new Rotor::Render_context(sID));
- content="<sID>"+sID+"</sID>\n";
- status=HTTPResponse::HTTP_OK;
- }
- if (request.getMethod()=="PUT") { //undocumented manual thread name
- if (body.size()) {
- string sID=body;
- cerr << "Rotor: starting thread "<< sID << endl;
- manager.start(new Rotor::Render_context(sID));
- content="<sID>"+sID+"</sID>\n";
- status=HTTPResponse::HTTP_OK;
- }
- }
- }
- else if (command[0]=="list") {
- if (request.getMethod()=="GET") {
- //std::list < Poco::AutoPtr < Poco::Task > >::iterator it;
- //it=manager.taskList().begin();
- //for (it=manager.taskList().begin();it !=manager.taskList().end();++it) {
- //content+="<sID>"+(*it)->name()+"</sID>\n";
- //}
-
- //massive problems making an iterator for the tasklist, the above crashes
- //solution: auto type range-based for-loop
- //this is c++11 specific but works
-
- for (auto& task: manager.taskList()) { //c++11
- content+="<sID>"+task->name()+" </sID>\n";
- }
- status=HTTPResponse::HTTP_OK;
- }
- }
- else if (command[0]=="styles") {
- //eventually retrieve from sql;
- //a bit of weirdness here: prefer to just get whole file to a string.
- if (request.getMethod()=="GET") {
- std::string stylesfile = "styles.xml";
- Poco::File f=Poco::File(stylesfile);
- if (f.exists()) {
- Poco::FileInputStream file(stylesfile);
- //while (!file.eof()) {
- // file >> content;
- //}
- Poco::StreamCopier::copyToString(file, content);
- status=HTTPResponse::HTTP_OK;
- }
- else {
- content="<status>Rotor: internal error: styles not found</status>\n";
- }
-
- }
- else {
- content="<status>Rotor: bad request</status>\n";
- }
- }
- else if (command[0]=="exit") {
- exit(0);
- }
- else {
- bool found=false;
- for (auto& task: manager.taskList()) { //c++11
- if(task->name()==command[0]) {
- //valid session command
- found=true;
- if (command.size()==1) {
- //just invoking sID
- if (request.getMethod()=="DELETE") {
- task->cancel();
- content="<status>1</status>\n";
- status=HTTPResponse::HTTP_OK;
- }
- else {
- content="<status>Rotor: render context invoked with no command</status>\n";
- }
- }
- else { //session modifier command- to be passed to render context
- //some commands need to return error codes
- //ie where the audio file isn't found
- //on the other hand, some commands need to know state of the renderer?
-
-
- vector<string> sc; //method,id,command1,{command2,}{body}
- sc.push_back(request.getMethod());
- for (auto& i: command){
- sc.push_back(i);
- }
- sc.push_back(body);
-
- Rotor::Command_response response=((Poco::AutoPtr<Rotor::Render_context>)task)->session_command(sc);
-
- content=response.description;
- status=response.status;
-
- }
- }
- }
- if (!found) {
- status=HTTPResponse::HTTP_NOT_FOUND;
- content="<status>Rotor: render context not found</status>\n";
- }
- }
- }
- else {
- content="<status>Rotor: empty request</status>";
- }
- */
- return new RenderContextHandler(content, status);
-}
-
-
-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 main(int argc, char** argv)
-{
-
- std::vector<std::string> args;
- args.push_back("-ax");
- if (argc>1) {
- std::string cmd=std::string(argv[1]);
- Poco::Pipe outPipe;
- Poco::Pipe inPipe;
- ProcessHandle ph = Process::launch(cmd, args, &inPipe, &outPipe, 0);
- Poco::PipeInputStream istr(outPipe);
- Poco::PipeOutputStream ostr(inPipe);
- //std::ofstream ostr("processes.txt");
- //
- while (true){
- Poco::StreamCopier::copyStream(istr,std::cout);
- //ostr<<std::cin;
- //std::cout<<istr;
- }
- return 0;
- }
- else std::cerr<<"usage: processmodel [executable]"<<std::endl;
-}
-
-
-int RotorServer::main(const std::vector<std::string>& args){
- if (!_helpRequested) {
-
- unsigned short port;
-
- xmlIO xml;
- if(xml.loadFile("settings.xml") ){
- port=xml.getAttribute("Rotor","port",9980,0);
- }
- else cerr<<"Rotord: settings.xml not found, using defaults"<<endl;
-
- port = (unsigned short) config().getInt("port", port); //override from command line
-
- std::string format(config().getString("format", DateTimeFormat::SORTABLE_FORMAT));
-
-
-
- ServerSocket svs(port);
- HTTPServer srv(new RotorRequestHandlerFactory(),svs, new HTTPServerParams);
- srv.start();
- waitForTerminationRequest();
- srv.stop();
- }
- return Application::EXIT_OK;
-} \ No newline at end of file