Improved push capabilities
authorlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 14 Oct 2004 08:43:37 +0000 (08:43 +0000)
committerlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 14 Oct 2004 08:43:37 +0000 (08:43 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt++@476 d19143bc-622f-0410-bfdd-b5b2a6649095

mlt++/src/MltMiracle.cpp
mlt++/src/MltMiracle.h

index adcdd16..dfed9c7 100644 (file)
@@ -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,14 +97,21 @@ 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;
+       _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 +126,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( ) ) );
index 7e6938d..22811bf 100644 (file)
 
 namespace Mlt
 {
+       class Properties;
        class Service;
        class Response;
 
-       class Miracle
+       class Miracle : public Properties
        {
                private:
                        miracle_server server;
                        void *_real;
                        parser_execute _execute;
+                       parser_received _received;
                        parser_push _push;
                public:
                        Miracle( char *name, int port = 5250, char *config = NULL );
                        virtual ~Miracle( );
+                       mlt_properties get_properties( );
                        bool start( );
                        bool is_running( );
                        virtual Response *execute( char *command );
+                       virtual Response *received( char *command, char *doc );
                        virtual Response *push( char *command, Service *service );
                        void wait_for_shutdown( );
        };