AsyncStatus ProxyFlushBatchAsync::invokeRemote(const ConnectionIPtr& connection, bool compress, bool) { if(_batchRequestNum == 0) { if(sent()) { return static_cast<AsyncStatus>(AsyncStatusSent | AsyncStatusInvokeSentCallback); } else { return AsyncStatusSent; } } _cachedConnection = connection; return connection->sendAsyncRequest(ICE_SHARED_FROM_THIS, compress, false, _batchRequestNum); }
AsyncStatus OutgoingAsync::send(const ConnectionIPtr& connection, bool compress, bool response) { _cachedConnection = connection; return connection->sendAsyncRequest(this, compress, response); }
void CommunicatorFlushBatchAsync::flushConnection(const ConnectionIPtr& con) { class FlushBatch : public OutgoingAsyncBase { public: FlushBatch(const CommunicatorFlushBatchAsyncPtr& outAsync, const InstancePtr& instance, InvocationObserver& observer) : OutgoingAsyncBase(instance), _outAsync(outAsync), _observer(observer) { } virtual bool sent() { _childObserver.detach(); _outAsync->check(false); return false; } virtual bool exception(const Exception& ex) { _childObserver.failed(ex.ice_id()); _childObserver.detach(); _outAsync->check(false); return false; } virtual InvocationObserver& getObserver() { return _observer; } virtual bool handleSent(bool, bool) { return false; } virtual bool handleException(const Ice::Exception&) { return false; } virtual bool handleResponse(bool) { return false; } virtual void handleInvokeSent(bool, OutgoingAsyncBase*) const { assert(false); } virtual void handleInvokeException(const Ice::Exception&, OutgoingAsyncBase*) const { assert(false); } virtual void handleInvokeResponse(bool, OutgoingAsyncBase*) const { assert(false); } private: const CommunicatorFlushBatchAsyncPtr _outAsync; InvocationObserver& _observer; }; { Lock sync(_m); ++_useCount; } try { OutgoingAsyncBasePtr flushBatch = ICE_MAKE_SHARED(FlushBatch, ICE_SHARED_FROM_THIS, _instance, _observer); int batchRequestNum = con->getBatchRequestQueue()->swap(flushBatch->getOs()); if(batchRequestNum == 0) { flushBatch->sent(); } else { con->sendAsyncRequest(flushBatch, false, false, batchRequestNum); } } catch(const LocalException&) { check(false); throw; } }
AsyncStatus OutgoingAsync::invokeRemote(const ConnectionIPtr& connection, bool compress, bool response) { _cachedConnection = connection; return connection->sendAsyncRequest(ICE_SHARED_FROM_THIS, compress, response, 0); }