diff options
author | vidon | 2004-10-20 12:34:26 +0000 |
---|---|---|
committer | vidon | 2004-10-20 12:34:26 +0000 |
commit | 549b43d1d15eb2498cb0f17475340a5f1c611784 (patch) | |
tree | 42ec0c289ad39fee2dd1126348ec6b356bf5d21e | |
parent | 0b19d4955de31fc1b50ac59fd963f944d591224e (diff) | |
download | ivycpy-549b43d1d15eb2498cb0f17475340a5f1c611784.zip ivycpy-549b43d1d15eb2498cb0f17475340a5f1c611784.tar.gz ivycpy-549b43d1d15eb2498cb0f17475340a5f1c611784.tar.bz2 ivycpy-549b43d1d15eb2498cb0f17475340a5f1c611784.tar.xz |
Les callbacks ApplicationCallback DieCallback DirectMessageCallback MessageCallback recoivent en premiere paramètre un tupe contenant des informations sur l'agent à l'origine de l'événement :
Un tuple avec :
un label correspondant au pointeur C IvyClientPtr
le nom de l'agent
l'hôte de l'agent
-rw-r--r-- | ivycpy.i | 215 |
1 files changed, 169 insertions, 46 deletions
@@ -38,13 +38,13 @@ /* #define DEFAULT_BUS 2010 */ /* typedef : debut */ -typedef struct { +typedef struct { IvyClientPtr next; - Client client; /* la socket client */ - MsgSndPtr msg_send; /* liste des requetes recues */ - char *app_name; /* nom de l'application */ - unsigned short app_port; /* port de l'application */ -} * IvyClientPtr; + Client client; + MsgSndPtr msg_send; + char *app_name; + unsigned short app_port; +} *IvyClientPtr; typedef enum { IvyApplicationConnected, IvyApplicationDisconnected } @@ -133,6 +133,7 @@ struct _channel { ChannelHandleRead handle_read; }; + static Channel channels_list = NULL; static int channel_initialized = 0; @@ -142,7 +143,8 @@ static int MainLoop = 1; typedef MsgRcvPtr *MsgRcvArray ; typedef TimerId *TimerIdArray ; - + typedef char *Message; + typedef Message *MessagesArray; /* donnees et fonctions de gestion des infos MsgRcvPtr retournés par IvyBindMsg */ static MsgRcvArray msgrcvarray ; @@ -261,8 +263,9 @@ pytkIvyApplicationCallback(IvyClientPtr app, void *user_data, IvyApplicationEvent event) { PyObject *func, *arglist; - PyObject *result; + PyObject *result, *ivyclienttuple; PyObject *resultobj; + static void *descr = 0; #ifdef __DEBUG__ printf("-pytkIvyApplicationCallback\n"); #endif @@ -277,11 +280,16 @@ pytkIvyApplicationCallback(IvyClientPtr app, void *user_data, /* user_data->func ; */ /* la signature python doit etre proc(n) elle ne retourne rien */ - - resultobj = SWIG_NewPointerObj((void *) app, SWIGTYPE_IvyClientPtr, 0); + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); result = Py_BuildValue("i", (int) event); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); + /* PyTuple_SetItem(ivyclienttuple, 3, PyString_FromString(IvyGetApplicationMessages(app)));*/ arglist = PyTuple_New(2); - PyTuple_SetItem(arglist,0,resultobj); + PyTuple_SetItem(arglist,0,ivyclienttuple); PyTuple_SetItem(arglist,1,result); result = PyEval_CallObject(func,arglist); @@ -294,7 +302,7 @@ pyIvyApplicationCallback(IvyClientPtr app, void *user_data, IvyApplicationEvent event) { PyObject *func, *arglist; - PyObject *result; + PyObject *result, *ivyclienttuple; PyObject *resultobj; static void *descr = 0; @@ -312,21 +320,28 @@ pyIvyApplicationCallback(IvyClientPtr app, void *user_data, /* la signature python doit etre proc(n) elle ne retourne rien */ descr = SWIG_TypeQuery("IvyClientPtr"); resultobj = SWIG_NewPointerObj((void *) app, descr, 0); - /* resultobj=SWIG_Python_NewPackedObj((void *) app, sizeof(IvyClientPtr),descr);*/ result = Py_BuildValue("i", (int) event); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); +/* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port)); */ + arglist = PyTuple_New(2); - PyTuple_SetItem(arglist,0,resultobj); + PyTuple_SetItem(arglist,0,ivyclienttuple); PyTuple_SetItem(arglist,1,result); result = PyEval_CallObject(func,arglist); + printf("-pyIvyApplicationCallback Fin\n"); Py_DECREF(arglist); } static void pytkIvyDieCallback(IvyClientPtr app, void *user_data, int id) { PyObject *func, *arglist; - PyObject *result; + PyObject *result, *ivyclienttuple; PyObject *resultobj; + static void *descr = 0; #ifdef __DEBUG__ printf("-pytkIvyApplicationCallback\n"); @@ -343,23 +358,30 @@ pytkIvyDieCallback(IvyClientPtr app, void *user_data, int id) /* user_data->func ; */ /* la signature python doit etre proc(n) elle ne retourne rien */ - resultobj = SWIG_NewPointerObj((void *) app, SWIGTYPE_IvyClientPtr, 0); + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); result = Py_BuildValue("i", (int) id); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); +/* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port)); */ + arglist = PyTuple_New(2); - PyTuple_SetItem(arglist,0,resultobj); + PyTuple_SetItem(arglist,0,ivyclienttuple); PyTuple_SetItem(arglist,1,result); - -/* arglist = Py_BuildValue("(i)", id); */ result = PyEval_CallObject(func,arglist); Py_DECREF(arglist); + } static void pyIvyDieCallback(IvyClientPtr app, void *user_data, int id) { PyObject *func, *arglist; - PyObject *result; + PyObject *result, *ivyclienttuple; PyObject *resultobj; + static void *descr = 0; #ifdef __DEBUG__ printf("-pyIvyApplicationCallback\n"); @@ -373,25 +395,81 @@ pyIvyDieCallback(IvyClientPtr app, void *user_data, int id) }; /* user_data->func ; */ /* la signature python doit etre proc(n) elle ne retourne rien */ - resultobj = SWIG_NewPointerObj((void *) app, SWIGTYPE_IvyClientPtr, 0); + + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); result = Py_BuildValue("i", (int) id); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); +/* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port)); */ + arglist = PyTuple_New(2); - PyTuple_SetItem(arglist,0,resultobj); + PyTuple_SetItem(arglist,0,ivyclienttuple); PyTuple_SetItem(arglist,1,result); -/* arglist = Py_BuildValue("(i)", id ); */ - result = PyEval_CallObject(func,arglist); + result = PyEval_CallObject(func,arglist); Py_DECREF(arglist); + } /* callback fixe (ce sera tjs le même) appellé par pyIvyBindMsg */ +/* static void */ +/* pytkMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) */ +/* { */ +/* PyObject *func; */ +/* PyObject *result, *ivyclienttuple; */ +/* PyObject *resultobj; */ +/* PyObject *pyargv ; */ +/* int i ; */ +/* static void *descr = 0; */ + +/* #ifdef __DEBUG__ */ +/* printf("-pytkMsgCallback\n"); */ +/* #endif */ + +/* func = (PyObject *) user_data; */ + +/* /\* cette verif est inutile ; elle a deja ete faite lors de */ +/* l'enregistrement du callback *\/ */ +/* if (!PyCallable_Check(func)) { */ +/* PyErr_SetString(PyExc_TypeError, "Need a callable object!"); */ +/* return ; */ +/* }; */ +/* /\* user_data->func ; *\/ */ +/* /\* la signature python doit etre proc(*arg)) */ +/* elle ne retourne rien *\/ */ +/* descr = SWIG_TypeQuery("IvyClientPtr"); */ +/* resultobj = SWIG_NewPointerObj((void *) app, descr, 0); */ +/* ivyclienttuple=PyTuple_New(3); */ +/* PyTuple_SetItem(ivyclienttuple, 0, resultobj); */ +/* PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); */ +/* PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); */ +/* /\* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port))); *\/ */ + +/* pyargv = PyTuple_New(argc); */ +/* PyTuple_SetItem(pyargv,0, ivyclienttuple); */ +/* for (i = 1; i < argc+1; i++) { */ +/* PyTuple_SetItem(pyargv,i,PyString_FromString(argv[i])); */ +/* } */ +/* /\* this codes is useless; the tuple (pyargv) is directly passed */ +/* to the Python call back */ +/* *\/ */ + +/* result = PyEval_CallObject(func, pyargv) ; */ +/* Py_DECREF(ivyclienttuple) */ +/* Py_DECREF(pyargv); */ +/* } */ static void pytkMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) { - PyObject *func, *arglist; - PyObject *result; PyObject *pyargv ; int i ; + PyObject *func; + PyObject *result, *ivyclienttuple; + PyObject *resultobj; + static void *descr = 0; #ifdef __DEBUG__ printf("-pytkMsgCallback\n"); @@ -408,9 +486,17 @@ pytkMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) /* user_data->func ; */ /* la signature python doit etre proc(*arg)) elle ne retourne rien */ - - pyargv = PyTuple_New(argc); - for (i = 0; i < argc; i++) { + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); +/* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port)); */ + + pyargv = PyTuple_New(argc+1); + PyTuple_SetItem(pyargv,0,ivyclienttuple); + for (i = 1; i < argc+1; i++) { PyTuple_SetItem(pyargv,i,PyString_FromString(argv[i])); } /* this codes is useless; the tuple (pyargv) is directly passed @@ -420,20 +506,24 @@ pytkMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) Py_DECREF(arglist); */ result = PyEval_CallObject(func, pyargv) ; - + Py_DECREF(pyargv); + Py_DECREF(ivyclienttuple); } static void pyMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) { - PyObject *func, *arglist; - PyObject *result; PyObject *pyargv ; int i ; - + PyObject *func; + PyObject *result, *ivyclienttuple; + PyObject *resultobj; + static void *descr = 0; + #ifdef __DEBUG__ - printf("-pyMsgCallback\n"); + printf("-pytkMsgCallback\n"); #endif + func = (PyObject *) user_data; /* cette verif est inutile ; elle a deja ete faite lors de @@ -443,11 +533,19 @@ pyMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) return ; }; /* user_data->func ; */ - /* la signature python doit etre proc(*arg) + /* la signature python doit etre proc(*arg)) elle ne retourne rien */ - - pyargv = PyTuple_New(argc); - for (i = 0; i < argc; i++) { + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); +/* PyTuple_SetItem(ivyclienttuple, 2, PyInt_FromLong((long) app->app_port)); */ + + pyargv = PyTuple_New(argc+1); + PyTuple_SetItem(pyargv,0,ivyclienttuple); + for (i = 1; i < argc+1; i++) { PyTuple_SetItem(pyargv,i,PyString_FromString(argv[i])); } /* this codes is useless; the tuple (pyargv) is directly passed @@ -455,8 +553,10 @@ pyMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) arglist = Py_BuildValue("(iO)", argc, pyargv); result = PyEval_CallObject(func,arglist); Py_DECREF(arglist); */ - + result = PyEval_CallObject(func, pyargv) ; + Py_DECREF(pyargv); + Py_DECREF(ivyclienttuple); } /* jeu de 2 callback fixes (mode tk ou sans (ce sera tjs le même) appellé par @@ -464,9 +564,11 @@ pyMsgCallback( IvyClientPtr app, void *user_data, int argc, char **argv ) static void pytkMsgDirectCallback( IvyClientPtr app, void *user_data, int id, char *msg ) { - PyObject *func; - PyObject *result; - + PyObject *func, *arglist; + PyObject *result, *ivyclienttuple; + PyObject *resultobj; + static void *descr = 0; + #ifdef __DEBUG__ printf("-pytkMsgDirectCallback\n"); #endif @@ -482,16 +584,27 @@ pytkMsgDirectCallback( IvyClientPtr app, void *user_data, int id, char *msg ) /* user_data->func ; */ /* la signature python doit etre proc(arg)) elle ne retourne rien */ + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); + arglist = PyTuple_New(2); + PyTuple_SetItem(arglist,0,ivyclienttuple); + PyTuple_SetItem(arglist,1,PyString_FromString(msg)); - result = PyEval_CallObject(func, PyString_FromString(msg)) ; + result = PyEval_CallObject(func,arglist); } static void pyMsgDirectCallback( IvyClientPtr app, void *user_data, int id, char *msg ) { - PyObject *func; - PyObject *result; + PyObject *func, *arglist; + PyObject *result, *ivyclienttuple; + PyObject *resultobj; + static void *descr = 0; #ifdef __DEBUG__ printf("-pyMsgDirectCallback\n"); @@ -507,7 +620,17 @@ pyMsgDirectCallback( IvyClientPtr app, void *user_data, int id, char *msg ) /* user_data->func ; */ /* la signature python doit etre proc(arg) elle ne retourne rien */ - result = PyEval_CallObject(func, PyString_FromString(msg)) ; + descr = SWIG_TypeQuery("IvyClientPtr"); + resultobj = SWIG_NewPointerObj((void *) app, descr, 0); + ivyclienttuple=PyTuple_New(3); + PyTuple_SetItem(ivyclienttuple, 0, resultobj); + PyTuple_SetItem(ivyclienttuple, 1, PyString_FromString(IvyGetApplicationName(app))); + PyTuple_SetItem(ivyclienttuple, 2, PyString_FromString(IvyGetApplicationHost(app))); + arglist = PyTuple_New(2); + PyTuple_SetItem(arglist,0,ivyclienttuple); + PyTuple_SetItem(arglist,1,PyString_FromString(msg)); + + result = PyEval_CallObject(func,arglist); } |