diff options
Diffstat (limited to 'cpp/src/IceGrid/AdminCallbackRouter.cpp')
-rw-r--r-- | cpp/src/IceGrid/AdminCallbackRouter.cpp | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/cpp/src/IceGrid/AdminCallbackRouter.cpp b/cpp/src/IceGrid/AdminCallbackRouter.cpp index 2fc00ab89c9..bb68190a233 100644 --- a/cpp/src/IceGrid/AdminCallbackRouter.cpp +++ b/cpp/src/IceGrid/AdminCallbackRouter.cpp @@ -12,35 +12,20 @@ using namespace Ice; using namespace std; -namespace +void +IceGrid::AdminCallbackRouter::invokeResponse(bool ok, const std::pair<const Byte*, const Byte*>& outParams, + const InvokeCookiePtr& cookie) { + cookie->cb()->ice_response(ok, outParams); +} -class InvokeAMICallback : public AMI_Array_Object_ice_invoke +void +IceGrid::AdminCallbackRouter::invokeException(const Ice::Exception&, const InvokeCookiePtr& cookie) { -public: - - InvokeAMICallback(const AMD_Object_ice_invokePtr& cb) : - _cb(cb) - { - } - - virtual void ice_response(bool ok, const std::pair<const Byte*, const Byte*>& outParams) - { - _cb->ice_response(ok, outParams); - } - - virtual void ice_exception(const Ice::Exception&) - { - _cb->ice_exception(ObjectNotExistException(__FILE__, __LINE__)); // Callback object is unreachable. - } - -private: - AMD_Object_ice_invokePtr _cb; -}; - + // Callback object is unreachable. + cookie->cb()->ice_exception(ObjectNotExistException(__FILE__, __LINE__)); } - void IceGrid::AdminCallbackRouter::addMapping(const string& category, const ConnectionPtr& con) { @@ -92,6 +77,11 @@ IceGrid::AdminCallbackRouter::ice_invoke_async(const AMD_Object_ice_invokePtr& c // // Call with AMI // - target->ice_invoke_async(new InvokeAMICallback(cb), current.operation, current.mode, inParams, current.ctx); + target->begin_ice_invoke(current.operation, current.mode, inParams, current.ctx, + newCallback_Object_ice_invoke( + this, + &AdminCallbackRouter::invokeResponse, + &AdminCallbackRouter::invokeException), + new InvokeCookie(cb)); } |