void BlobjectI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCb, const vector<Ice::Byte>& inEncaps, const Ice::Current& current) { Ice::ConnectionPtr connection = getConnection(current); const bool twoway = current.requestId > 0; Ice::ObjectPrx obj = connection->createProxy(current.id); if(!twoway) { if(_startBatch) { _startBatch = false; _batchProxy = obj->ice_batchOneway(); } if(_batchProxy) { obj = _batchProxy; } if(!current.facet.empty()) { obj = obj->ice_facet(current.facet); } if(_batchProxy) { vector<Ice::Byte> out; obj->ice_invoke(current.operation, current.mode, inEncaps, out, current.ctx); amdCb->ice_response(true, vector<Ice::Byte>()); } else { CallbackPtr cb = new Callback(amdCb, false); Ice::Callback_Object_ice_invokePtr del = Ice::newCallback_Object_ice_invoke(cb, &Callback::response, &Callback::exception, &Callback::sent); obj->ice_oneway()->begin_ice_invoke(current.operation, current.mode, inEncaps, current.ctx, del); } } else { if(!current.facet.empty()) { obj = obj->ice_facet(current.facet); } CallbackPtr cb = new Callback(amdCb, true); Ice::Callback_Object_ice_invokePtr del = Ice::newCallback_Object_ice_invoke(cb, &Callback::response, &Callback::exception, &Callback::sent); obj->begin_ice_invoke(current.operation, current.mode, inEncaps, current.ctx, del); } }
void IceGrid::AdminRouter::invokeOnTarget(const Ice::ObjectPrx& target, const AMD_Object_ice_invokePtr& cb, const pair<const Byte*, const Byte*>& inParams, const Current& current) { assert(target != 0); // // Call with AMI // Callback_Object_ice_invokePtr amiCb = newCallback_Object_ice_invoke( new CallbackI(cb, target, current.operation, _traceLevels), &CallbackI::response, &CallbackI::exception); if(_traceLevels->admin > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->adminCat); out << "routing operation `" << current.operation << "' to `" << target->ice_toString() << "'"; } target->begin_ice_invoke(current.operation, current.mode, inParams, current.ctx, amiCb); }