diff options
author | vidon | 2005-02-24 15:15:24 +0000 |
---|---|---|
committer | vidon | 2005-02-24 15:15:24 +0000 |
commit | da1e670c74ab7422661fa8516f31f79758753bdc (patch) | |
tree | da4757e628d8a077a99f6a2723d4418c1035337f | |
parent | e9f667d046f4ddb6756848b4537add57fd96a539 (diff) | |
download | ivy-c-da1e670c74ab7422661fa8516f31f79758753bdc.zip ivy-c-da1e670c74ab7422661fa8516f31f79758753bdc.tar.gz ivy-c-da1e670c74ab7422661fa8516f31f79758753bdc.tar.bz2 ivy-c-da1e670c74ab7422661fa8516f31f79758753bdc.tar.xz |
Add functions to manipulate binding events
-rw-r--r-- | src/ivy.c | 44 | ||||
-rw-r--r-- | src/ivy.h | 15 |
2 files changed, 57 insertions, 2 deletions
@@ -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 ) { @@ -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 (); |