示例#1
0
        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;
        }
示例#2
0
    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>();
    }
示例#3
0
    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();
    }
示例#4
0
    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);
    }
示例#6
0
    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);
    }
示例#7
0
    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();
    }