Add a .gitignore file
[melted] / mlt++ / src / MltMiracle.cpp
index ef88449..1e6d7ea 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "MltMiracle.h"
 #include "MltService.h"
+#include "MltResponse.h"
 using namespace Mlt;
 
 #include <time.h>
@@ -29,7 +30,32 @@ static valerie_response mlt_miracle_execute( void *arg, char *command )
        Miracle *miracle = ( Miracle * )arg;
        if ( miracle != NULL )
        {
-               return miracle->execute( command );
+               Response *response = miracle->execute( command );
+               valerie_response real = valerie_response_clone( response->get_response( ) );
+               delete response;
+               return real;
+       }
+       else
+       {
+               valerie_response response = valerie_response_init( );
+               valerie_response_set_error( response, 500, "Invalid server" );
+               return response;
+       }
+}
+
+static valerie_response mlt_miracle_received( void *arg, char *command, char *doc )
+{
+       Miracle *miracle = ( Miracle * )arg;
+       if ( miracle != NULL )
+       {
+               Response *response = miracle->received( command, doc );
+               if ( response != NULL )
+               {
+                       valerie_response real = valerie_response_clone( response->get_response( ) );
+                       delete response;
+                       return real;
+               }
+               return NULL;
        }
        else
        {
@@ -45,7 +71,10 @@ static valerie_response mlt_miracle_push( void *arg, char *command, mlt_service
        if ( miracle != NULL )
        {
                Service input( service );
-               return miracle->push( command, &input );
+               Response *response = miracle->push( command, &input );
+               valerie_response real = valerie_response_clone( response->get_response( ) );
+               delete response;
+               return real;
        }
        else
        {
@@ -55,7 +84,8 @@ static valerie_response mlt_miracle_push( void *arg, char *command, mlt_service
        }
 }
 
-Miracle::Miracle( char *name, int port, char *config )
+Miracle::Miracle( char *name, int port, char *config ) :
+       Properties( false )
 {
        server = miracle_server_init( name );
        miracle_server_set_port( server, port );
@@ -64,18 +94,27 @@ Miracle::Miracle( char *name, int port, char *config )
 
 Miracle::~Miracle( )
 {
-       miracle_server_shutdown( server );
+       miracle_server_close( server );
+}
+
+mlt_properties Miracle::get_properties( )
+{
+       return &server->parent;
 }
 
 bool Miracle::start( )
 {
-       miracle_server_execute( server );
-       _real = server->parser->real;
-       _execute = server->parser->execute;
-       _push = server->parser->push;
-       server->parser->real = this;
-       server->parser->execute = mlt_miracle_execute;
-       server->parser->push = mlt_miracle_push;
+       if ( miracle_server_execute( server ) == 0 )
+       {
+               _real = server->parser->real;
+               _execute = server->parser->execute;
+               _received = server->parser->received;
+               _push = server->parser->push;
+               server->parser->real = this;
+               server->parser->execute = mlt_miracle_execute;
+               server->parser->received = mlt_miracle_received;
+               server->parser->push = mlt_miracle_push;
+       }
        return server->shutdown == 0;
 }
 
@@ -84,14 +123,19 @@ bool Miracle::is_running( )
        return server->shutdown == 0;
 }
 
-valerie_response Miracle::execute( char *command )
+Response *Miracle::execute( char *command )
 {
-       return _execute( _real, command );
+       return new Response( _execute( _real, command ) );
 }
 
-valerie_response Miracle::push( char *command, Service *service )
+Response *Miracle::received( char *command, char *doc )
 {
-       return _push( _real, command, service->get_service( ) );
+       return new Response( _received( _real, command, doc ) );
+}
+
+Response *Miracle::push( char *command, Service *service )
+{
+       return new Response( _push( _real, command, service->get_service( ) ) );
 }
 
 void Miracle::wait_for_shutdown( )
@@ -101,3 +145,13 @@ void Miracle::wait_for_shutdown( )
                nanosleep( &tm, NULL );
 }
 
+void Miracle::log_level( int threshold )
+{
+       miracle_log_init( log_stderr, threshold );
+}
+
+Properties *Miracle::unit( int index )
+{
+       mlt_properties properties = miracle_server_fetch_unit( server, index );
+       return properties != NULL ? new Properties( properties ) : NULL;
+}