void ClientStub::assign(const ClientStub & rhs) { if (&rhs != this) { mInterfaceName = rhs.mInterfaceName; mToken = rhs.mToken; mDefaultCallingSemantics = rhs.mDefaultCallingSemantics; mProtocol = rhs.mProtocol; mMarshalingProtocol = rhs.mMarshalingProtocol; mEndpointName = rhs.mEndpointName; mObjectName = rhs.mObjectName; mRemoteCallTimeoutMs = rhs.mRemoteCallTimeoutMs; mConnectTimeoutMs = rhs.mConnectTimeoutMs; mAutoReconnect = rhs.mAutoReconnect; mConnected = false; mAutoVersioning = rhs.mAutoVersioning; mRuntimeVersion = rhs.mRuntimeVersion; mArchiveVersion = rhs.mArchiveVersion; mUseNativeWstringSerialization = rhs.mUseNativeWstringSerialization; mEnableSfPointerTracking = rhs.mEnableSfPointerTracking; mUserData = rhs.mUserData; mPingBackIntervalMs = rhs.mPingBackIntervalMs; mSignalled = false; setEndpoint(rhs.getEndpoint()); mClientProgressPtr = rhs.mClientProgressPtr; #if RCF_FEATURE_FILETRANSFER==1 mFileProgressCb = rhs.mFileProgressCb; mTransferWindowS = rhs.mTransferWindowS; #endif mHttpProxy = rhs.mHttpProxy; mHttpProxyPort = rhs.mHttpProxyPort; mTransportProtocol = rhs.mTransportProtocol; mUsername = rhs.mUsername; mPassword = rhs.mPassword; mKerberosSpn = rhs.mKerberosSpn; mEnableCompression = rhs.mEnableCompression; mCertificatePtr = rhs.mCertificatePtr; mCaCertificatePtr = rhs.mCaCertificatePtr; mCertificateValidationCb = rhs.mCertificateValidationCb; mSchannelCertificateValidation = rhs.mSchannelCertificateValidation; mOpenSslCipherSuite = rhs.mOpenSslCipherSuite; mSslImplementation = rhs.mSslImplementation; } }
ClientStub::ClientStub(const ClientStub &rhs) : mToken(rhs.mToken), mDefaultCallingSemantics(rhs.mDefaultCallingSemantics), mProtocol(rhs.mProtocol), mMarshalingProtocol(DefaultMarshalingProtocol), mEndpointName(rhs.mEndpointName), mObjectName(rhs.mObjectName), mInterfaceName(rhs.mInterfaceName), mRemoteCallTimeoutMs(rhs.mRemoteCallTimeoutMs), mConnectTimeoutMs(rhs.mConnectTimeoutMs), mAutoReconnect(rhs.mAutoReconnect), mConnected(), mTries(), mAutoVersioning(rhs.mAutoVersioning), mRuntimeVersion(rhs.mRuntimeVersion), mArchiveVersion(rhs.mArchiveVersion), mUseNativeWstringSerialization(rhs.mUseNativeWstringSerialization), mEnableSfPointerTracking(rhs.mEnableSfPointerTracking), mUserData(rhs.mUserData), mAsync(), mAsyncOpType(None), mEndTimeMs(), mRetry(), mRcs(Twoway), mEncodedByteBuffer(), mEncodedByteBuffers(), mpParameters(), mPingBackIntervalMs(rhs.mPingBackIntervalMs), mPingBackTimeStamp(), mPingBackCount(), mNextTimerCallbackMs(), mNextPingBackCheckMs(), mPingBackCheckIntervalMs(), mTimerIntervalMs(), mSignalled(), mBatchMode(false), mBatchMaxMessageLength(DefaultBatchMaxMessageLimit), mBatchCount(0), mBatchMessageCount(0), mSetTransportProtocol(false), #if RCF_FEATURE_FILETRANSFER==1 mFileProgressCb(rhs.mFileProgressCb), #endif mTransferWindowS(rhs.mTransferWindowS), mCallInProgress(false), mHttpProxy(rhs.mHttpProxy), mHttpProxyPort(rhs.mHttpProxyPort), mTransportProtocol(rhs.mTransportProtocol), mUsername(rhs.mUsername), mPassword(rhs.mPassword), mKerberosSpn(rhs.mKerberosSpn), mEnableCompression(rhs.mEnableCompression), mSslImplementation(rhs.mSslImplementation) { setEndpoint( rhs.getEndpoint() ); if (rhs.mClientProgressPtr) { mClientProgressPtr.reset( new ClientProgress(*rhs.mClientProgressPtr)); } }
SubscriptionPtr SubscriptionService::onRequestSubscriptionCompleted( boost::int32_t ret, const std::string & publisherName, ClientStub & clientStub, RcfClientPtr rcfClientPtr, OnSubscriptionDisconnect onDisconnect, boost::uint32_t pubToSubPingIntervalMs, bool pingsEnabled) { if (ret != RcfError_Ok) { RCF_THROW( Exception( Error(ret) ) ); } ClientTransportAutoPtr clientTransportAutoPtr( clientStub.releaseTransport() ); ServerTransport * pTransport = NULL; ServerTransportEx * pTransportEx = NULL; pTransport = & mpServer->findTransportCompatibleWith( *clientTransportAutoPtr); pTransportEx = dynamic_cast<ServerTransportEx *>(pTransport); ServerTransportEx & serverTransportEx = * pTransportEx; SessionPtr sessionPtr = serverTransportEx.createServerSession( clientTransportAutoPtr, StubEntryPtr(new StubEntry(rcfClientPtr)), true); RCF_ASSERT( sessionPtr ); RcfSessionPtr rcfSessionPtr = sessionPtr; rcfSessionPtr->setUserData(clientStub.getUserData()); rcfSessionPtr->setPingTimestamp(); std::string publisherUrl; EndpointPtr epPtr = clientStub.getEndpoint(); if (epPtr) { publisherUrl = epPtr->asString(); } //if (!clientTransportAutoPtr->isAssociatedWithIoService()) //{ // AsioServerTransport & asioTransport = dynamic_cast<AsioServerTransport &>( // mpServer->getServerTransport()); // clientTransportAutoPtr->associateWithIoService(asioTransport.getIoService()); //} SubscriptionPtr subscriptionPtr( new Subscription( *this, clientTransportAutoPtr, rcfSessionPtr, pubToSubPingIntervalMs, publisherUrl, publisherName, onDisconnect)); rcfSessionPtr->setOnDestroyCallback( boost::bind( &Subscription::onDisconnect, SubscriptionWeakPtr(subscriptionPtr), _1)); subscriptionPtr->setWeakThisPtr(subscriptionPtr); subscriptionPtr->mPingsEnabled = pingsEnabled; Lock lock(mSubscriptionsMutex); mSubscriptions.insert(subscriptionPtr); return subscriptionPtr; }