From da1e670c74ab7422661fa8516f31f79758753bdc Mon Sep 17 00:00:00 2001 From: vidon Date: Thu, 24 Feb 2005 15:15:24 +0000 Subject: Add functions to manipulate binding events --- src/ivy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/ivy.h | 15 +++++++++++++-- 2 files changed, 57 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ivy.c b/src/ivy.c index abaa96f..2fd0fa0 100644 --- a/src/ivy.c +++ b/src/ivy.c @@ -123,6 +123,10 @@ static void *direct_user_data = 0; static IvyApplicationCallback application_callback; static void *application_user_data = 0; +/* callback appele sur ajout suppression de regexp */ +static IvyBindCallback application_bind_callback; +static void *application_bind_data = 0; + /* callback appele sur demande de terminaison d'application */ static IvyDieCallback application_die_callback; static void *application_die_user_data = 0; @@ -385,6 +389,10 @@ static void Receive( Client client, void *data, char *line ) snd->id = id; snd->str_regexp = strdup( arg ); snd->regexp = regexp; + if ( application_bind_callback ) + { + (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyAddBind ); + } } } else @@ -409,6 +417,11 @@ static void Receive( Client client, void *data, char *line ) { printf("Error studying %s, message: %s\n",arg,errbuf); } + + if ( application_bind_callback ) + { + (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyAddBind ); + } } } else @@ -426,6 +439,10 @@ static void Receive( Client client, void *data, char *line ) IVY_LIST_ITER( clnt->msg_send, snd, ( id != snd->id )); if ( snd ) { + if ( application_bind_callback ) + { + (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyRemoveBind ); + } #ifndef USE_PCRE_REGEX free( snd->str_regexp ); #else @@ -651,6 +668,19 @@ void IvyInit (const char *appname, const char *ready, ready_message = ready; } +void IvySetBindCallback(IvyBindCallback bind_callback, void *bind_data + ) +{ + application_bind_callback=bind_callback; + application_bind_data=bind_data; +} + +void IvyDelBindCallback() +{ + application_bind_callback=0; + free(application_bind_data); + application_bind_data=0; +} void IvyClasses( int argc, const char **argv) { messages_classes_count = argc; @@ -901,6 +931,20 @@ void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplic break; } } +void IvyDefaultBindCallback( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event) +{ + switch ( event ) { + case IvyAddBind: + printf("Application: %s on %s add regexp %d : %s\n", IvyGetApplicationName( app ), IvyGetApplicationHost(app), id, regexp); + break; + case IvyRemoveBind: + printf("Application: %s on %s remove regexp %d :%s\n", IvyGetApplicationName( app ), IvyGetApplicationHost(app), id, regexp); + break; + default: + printf("Application: %s unkown event %d\n",IvyGetApplicationName( app ), event); + break; + } +} IvyClientPtr IvyGetApplication( char *name ) { diff --git a/src/ivy.h b/src/ivy.h index 6577e79..1ea319a 100644 --- a/src/ivy.h +++ b/src/ivy.h @@ -29,12 +29,18 @@ extern "C" { typedef struct _clnt_lst *IvyClientPtr; typedef enum { IvyApplicationConnected, IvyApplicationDisconnected } IvyApplicationEvent; +typedef enum { IvyAddBind, IvyRemoveBind } IvyBindEvent; extern void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplicationEvent event ) ; +extern void IvyDefaultBindCallback( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event ) ; + /* callback callback appele sur connexion deconnexion d'une appli */ typedef void (*IvyApplicationCallback)( IvyClientPtr app, void *user_data, IvyApplicationEvent event ) ; +/* callback callback appele sur ajout ou suppression d'un bind */ +typedef void (*IvyBindCallback)( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event ) ; + /* callback appele sur reception de die */ typedef void (*IvyDieCallback)( IvyClientPtr app, void *user_data, int id ) ; @@ -56,8 +62,13 @@ void IvyInit( IvyApplicationCallback callback, /* callback appele sur connection deconnection d'une appli */ void *data, /* user data passe au callback */ IvyDieCallback die_callback, /* last change callback before die */ - void *die_data ); /* user data */ - + void *die_data /* user data */ + ); + + void IvySetBindCallback( + IvyBindCallback bind_callback, + void *bind_data ); + void IvyDelBindCallback(); void IvyStart (const char*); void IvyStop (); -- cgit v1.1