ClientTransportAutoPtr AsioServerTransport::createClientTransport( SessionPtr sessionPtr) { RCF2_TRACE(""); AsioSessionState & sessionState = dynamic_cast<AsioSessionState &>(sessionPtr->getProactor()); AsioSessionStatePtr sessionStatePtr = sessionState.shared_from_this(); sessionStatePtr->mDemuxerPtr = mDemuxerPtr; ClientTransportAutoPtr clientTransportPtr = sessionStatePtr->implCreateClientTransport(); ConnectionOrientedClientTransport & coClientTransport = static_cast<ConnectionOrientedClientTransport &>( *clientTransportPtr); coClientTransport.setNotifyCloseFunctor( boost::bind( &AsioServerTransport::notifyClose, this, AsioSessionStateWeakPtr(sessionStatePtr))); coClientTransport.setCloseFunctor( sessionStatePtr->implGetCloseFunctor() ); return clientTransportPtr; }
bool AsioServerTransport::isConnected(const SessionPtr &sessionPtr) { AsioSessionState & sessionState = dynamic_cast<AsioSessionState &>(sessionPtr->getSessionState()); AsioSessionStatePtr sessionStatePtr = sessionState.sharedFromThis(); return sessionStatePtr.get() && sessionStatePtr->implIsConnected(); }
bool AsioServerTransport::isConnected(const SessionPtr &sessionPtr) { AsioSessionState & sessionState = dynamic_cast<AsioSessionState &>(sessionPtr->getProactor()); AsioSessionStatePtr sessionStatePtr = sessionState.shared_from_this(); // TODO: what to do for non-TCP sockets return sessionStatePtr.get() && isFdConnected(sessionStatePtr->implGetNative()); }
ClientTransportAutoPtr AsioServerTransport::createClientTransport( SessionPtr sessionPtr) { AsioSessionState & sessionState = dynamic_cast<AsioSessionState &>(sessionPtr->getSessionState()); AsioSessionStatePtr sessionStatePtr = sessionState.sharedFromThis(); ClientTransportAutoPtr clientTransportPtr = sessionStatePtr->implCreateClientTransport(); ConnectionOrientedClientTransport & coClientTransport = static_cast<ConnectionOrientedClientTransport &>( *clientTransportPtr); coClientTransport.setRcfSession(sessionState.mSessionPtr); sessionState.mSocketOpsMutexPtr.reset( new Mutex() ); coClientTransport.setSocketOpsMutex(sessionState.mSocketOpsMutexPtr); return clientTransportPtr; }