00001
00004 #ifndef SWIG_PYTHON_H
00005 # define SWIG_PYTHON_H
00006
00007 # ifndef SWIGPYTHON
00008 # error "This file must be compiled with SWIG in python mode."
00009 # endif
00010
00011 # include <object.h>
00012 # include "uclient.h"
00013
00014 namespace urbi
00015 {
00020 class Callback : public UCallbackWrapper
00021 {
00022 public:
00023 Callback(PyObject* obj) :
00024 UCallbackWrapper(),
00025 obj_ (obj)
00026 {
00027 if (!obj_ || !PyFunction_Check(obj_) || !PyCallable_Check(obj_))
00028 {
00029 PyErr_SetString (PyExc_TypeError, "Need a callable object!");
00030 return;
00031 }
00032 Py_INCREF(obj_);
00033 }
00034
00035 virtual UCallbackAction operator () (const UMessage& msg)
00036 {
00037 FILE *fp = fopen("/tmp/foo.txt","w");
00038 PyObject_Print(obj_,fp,Py_PRINT_RAW);
00039 fclose(fp);
00040
00041 PyObject_CallFunction(obj_,"s", msg.message.c_str());
00042 return URBI_CONTINUE;
00043 }
00044
00045 virtual ~Callback()
00046 {
00047 Py_DECREF(obj_);
00048 }
00049
00050 private:
00051 PyObject* obj_;
00052 };
00053 };
00054
00055 #endif