X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=mlt%2B%2B%2Fsrc%2FMltMiracle.cpp;h=1e6d7ea57d798501404da972b494eb6c250c0f5d;hb=2b945741324ce977c7c00ef855e87d142867b550;hp=adcdd16c764a3dfb5a94493a4c37c7e214c326b9;hpb=894fa2d9a38414cd94f5ce7bec0815bb6f23237c;p=melted diff --git a/mlt++/src/MltMiracle.cpp b/mlt++/src/MltMiracle.cpp index adcdd16..1e6d7ea 100644 --- a/mlt++/src/MltMiracle.cpp +++ b/mlt++/src/MltMiracle.cpp @@ -43,6 +43,28 @@ static valerie_response mlt_miracle_execute( void *arg, char *command ) } } +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 + { + valerie_response response = valerie_response_init( ); + valerie_response_set_error( response, 500, "Invalid server" ); + return response; + } +} + static valerie_response mlt_miracle_push( void *arg, char *command, mlt_service service ) { Miracle *miracle = ( Miracle * )arg; @@ -62,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 ); @@ -74,15 +97,24 @@ Miracle::~Miracle( ) 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; } @@ -96,6 +128,11 @@ Response *Miracle::execute( char *command ) return new Response( _execute( _real, command ) ); } +Response *Miracle::received( char *command, char *doc ) +{ + return new Response( _received( _real, command, doc ) ); +} + Response *Miracle::push( char *command, Service *service ) { return new Response( _push( _real, command, service->get_service( ) ) ); @@ -108,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; +}