diff options
Diffstat (limited to 'py/modules/IcePy/Operation.cpp')
-rw-r--r-- | py/modules/IcePy/Operation.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/py/modules/IcePy/Operation.cpp b/py/modules/IcePy/Operation.cpp index 19ae001c952..b98679030a5 100644 --- a/py/modules/IcePy/Operation.cpp +++ b/py/modules/IcePy/Operation.cpp @@ -298,6 +298,14 @@ extern PyTypeObject AMDCallbackType; } +static OperationPtr +getOperation(PyObject* p) +{ + assert(PyObject_IsInstance(p, reinterpret_cast<PyObject*>(&OperationType)) == 1); + OperationObject* obj = reinterpret_cast<OperationObject*>(p); + return *obj->op; +} + #ifdef WIN32 extern "C" #endif @@ -2070,6 +2078,66 @@ IcePy::BlobjectUpcall::exception(PyException& ex) } PyObject* +IcePy::iceIsA(const Ice::ObjectPrx& prx, PyObject* args) +{ + PyObject* objectType = lookupType("Ice.Object"); + assert(objectType); + PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_isA"); + assert(obj.get()); + + OperationPtr op = getOperation(obj.get()); + assert(op); + + InvocationPtr i = new SyncTypedInvocation(prx, op); + return i->invoke(args); +} + +PyObject* +IcePy::icePing(const Ice::ObjectPrx& prx, PyObject* args) +{ + PyObject* objectType = lookupType("Ice.Object"); + assert(objectType); + PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_ping"); + assert(obj.get()); + + OperationPtr op = getOperation(obj.get()); + assert(op); + + InvocationPtr i = new SyncTypedInvocation(prx, op); + return i->invoke(args); +} + +PyObject* +IcePy::iceIds(const Ice::ObjectPrx& prx, PyObject* args) +{ + PyObject* objectType = lookupType("Ice.Object"); + assert(objectType); + PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_ids"); + assert(obj.get()); + + OperationPtr op = getOperation(obj.get()); + assert(op); + + InvocationPtr i = new SyncTypedInvocation(prx, op); + return i->invoke(args); +} + +PyObject* +IcePy::iceId(const Ice::ObjectPrx& prx, PyObject* args) +{ + PyObject* objectType = lookupType("Ice.Object"); + assert(objectType); + PyObjectHandle obj = PyObject_GetAttrString(objectType, "_op_ice_id"); + assert(obj.get()); + + OperationPtr op = getOperation(obj.get()); + assert(op); + + InvocationPtr i = new SyncTypedInvocation(prx, op); + return i->invoke(args); +} + +PyObject* IcePy::iceInvoke(const Ice::ObjectPrx& prx, PyObject* args) { InvocationPtr i = new SyncBlobjectInvocation(prx); |