RcfClientPtr makeServerStub() { boost::shared_ptr<T> tPtr( new T ); boost::shared_ptr< RCF::I_Deref<T> > derefPtr( new RCF::DerefSharedPtr<T>(tPtr) ); RcfClientPtr rcfClientPtr = createServerStub( (I1 *) NULL, (T *) NULL, derefPtr); { RcfClientPtr mergeePtr = createServerStub( (I2 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } { RcfClientPtr mergeePtr = createServerStub( (I3 *) 0, (T *) 0, derefPtr); rcfClientPtr->getServerStub().merge(mergeePtr); } return rcfClientPtr; }
void ClientStub::disconnect() { std::string endpoint; if (mEndpoint.get()) { endpoint = mEndpoint->asString(); } RcfClientPtr subRcfClientPtr = getSubRcfClientPtr(); setSubRcfClientPtr( RcfClientPtr() ); if (subRcfClientPtr) { subRcfClientPtr->getClientStub().disconnect(); subRcfClientPtr.reset(); } if (mTransport.get()) { RCF_LOG_2()(this)(endpoint) << "RcfClient - disconnecting from server."; mTransport->disconnect(mConnectTimeoutMs); mConnected = false; } if (mBatchBufferPtr) { mBatchBufferPtr->resize(0); } mAsyncCallback = boost::function0<void>(); }
ServerBindingPtr RcfServer::bindImpl( const std::string &name, RcfClientPtr rcfClientPtr) { RCF_ASSERT(rcfClientPtr.get()); RCF_LOG_2()(name) << "RcfServer - exposing static binding."; WriteLock writeLock(mStubMapMutex); mStubMap[name] = StubEntryPtr( new StubEntry(rcfClientPtr)); return rcfClientPtr->getServerStubPtr(); }
bool RcfServer::bindShared( const std::string &name, RcfClientPtr rcfClientPtr) { RCF_ASSERT(rcfClientPtr.get()); RCF_LOG_2()(name) << "RcfServer - exposing static binding."; WriteLock writeLock(mStubMapMutex); mStubMap[name] = StubEntryPtr( new StubEntry(rcfClientPtr)); return true; }
void SubscriptionService::doRequestSubscriptionAsync_Complete( Future<Void> fv, RcfClientPtr requestClientPtr, const std::string & publisherName, RcfClientPtr rcfClientPtr, OnSubscriptionDisconnect onDisconnect, OnAsyncSubscribeCompleted onCompletion) { bool pingsEnabled = true; boost::uint32_t ret = 0; boost::uint32_t pubToSubPingIntervalMs = 0; ExceptionPtr ePtr( fv.getAsyncException().release() ); if (!ePtr) { // Get OOB response. ClientStub & stub = requestClientPtr->getClientStub(); OobRequestSubscription msg(stub.getRuntimeVersion()); ByteBuffer controlResponse = stub.getOutOfBandResponse(); stub.setOutofBandRequest(ByteBuffer()); stub.setOutofBandResponse(ByteBuffer()); msg.decodeResponse(controlResponse); ret = msg.mResponseError; pubToSubPingIntervalMs = msg.mPubToSubPingIntervalMs; } createSubscriptionImplEnd( ePtr, requestClientPtr->getClientStubPtr(), ret, publisherName, rcfClientPtr, onDisconnect, onCompletion, pubToSubPingIntervalMs, pingsEnabled); }
void ServerBinding::merge(RcfClientPtr rcfClientPtr) { InvokeFunctorMap &invokeFunctorMap = rcfClientPtr->getServerStub().mInvokeFunctorMap; std::copy( invokeFunctorMap.begin(), invokeFunctorMap.end(), std::insert_iterator<InvokeFunctorMap>( mInvokeFunctorMap, mInvokeFunctorMap.begin())); invokeFunctorMap.clear(); mMergedStubs.push_back(rcfClientPtr); }
void onRtfCompleted( RCF::Future<Void> fv, RcfClientPtr rtfClientPtr, ClientStub & clientStubOrig, boost::shared_ptr<std::vector<FilterPtr> > filters, boost::function0<void> onCompletion) { ClientStubPtr rtfStubPtr = rtfClientPtr->getClientStubPtr(); clientStubOrig.setTransport( rtfStubPtr->releaseTransport() ); clientStubOrig.setSubRcfClientPtr( RcfClientPtr() ); std::auto_ptr<Exception> ePtr = fv.getAsyncException(); if ( ePtr.get() ) { clientStubOrig.setAsyncException(ePtr); } else { // Get OOB response. OobRequestTransportFilters msg(clientStubOrig.getRuntimeVersion()); ByteBuffer controlResponse = rtfStubPtr->getOutOfBandResponse(); rtfStubPtr->setOutofBandRequest(ByteBuffer()); rtfStubPtr->setOutofBandResponse(ByteBuffer()); msg.decodeResponse(controlResponse); int ret = msg.mResponseError; if (ret != RcfError_Ok) { ePtr.reset( new RemoteException(Error(ret)) ); clientStubOrig.setAsyncException(ePtr); } else { for (std::size_t i=0; i<filters->size(); ++i) { (*filters)[i]->resetState(); } clientStubOrig.getTransport().setTransportFilters(*filters); } } onCompletion(); }