aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvidon2004-10-20 12:34:26 +0000
committervidon2004-10-20 12:34:26 +0000
commit549b43d1d15eb2498cb0f17475340a5f1c611784 (patch)
tree42ec0c289ad39fee2dd1126348ec6b356bf5d21e
parent0b19d4955de31fc1b50ac59fd963f944d591224e (diff)
downloadivycpy-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.i215
1 files changed, 169 insertions, 46 deletions
diff --git a/ivycpy.i b/ivycpy.i
index 171503a..8495f4a 100644
--- a/ivycpy.i
+++ b/ivycpy.i
@@ -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);
}