diff options
author | Mark Spruiell <mes@zeroc.com> | 2007-11-08 19:23:27 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2007-11-08 19:23:27 -0800 |
commit | 24aa43df750992b9f3b6d99419ab0c4071a14e8b (patch) | |
tree | ed39cc25a32c7d4497d0d7db22f473d2a64b7a27 /py/modules/IcePy/Operation.cpp | |
parent | Fix a problem when building in a git repository or source distribution (diff) | |
download | ice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.tar.bz2 ice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.tar.xz ice-24aa43df750992b9f3b6d99419ab0c4071a14e8b.zip |
Python changes for bug2522
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); |