ProxyOutgoingBase::ProxyOutgoingBase(const Ice::ObjectPrxPtr& proxy, OperationMode mode) : OutgoingBase(proxy->__reference()->getInstance().get()), _proxy(proxy), _mode(mode), _state(StateUnsent) { int invocationTimeout = _proxy->__reference()->getInvocationTimeout(); if(invocationTimeout > 0) { _invocationTimeoutDeadline = Time::now(Time::Monotonic) + Time::milliSeconds(invocationTimeout); } }
Outgoing::Outgoing(const Ice::ObjectPrxPtr& proxy, const string& operation, OperationMode mode, const Context& context) : ProxyOutgoingBase(proxy, mode), _encoding(getCompatibleEncoding(proxy->__reference()->getEncoding())), _is(proxy->__reference()->getInstance().get(), Ice::currentProtocolEncoding), _operation(operation) { checkSupportedProtocol(getCompatibleProtocol(proxy->__reference()->getProtocol())); _observer.attach(proxy, operation, context); switch(_proxy->__reference()->getMode()) { case Reference::ModeTwoway: case Reference::ModeOneway: case Reference::ModeDatagram: { _os.writeBlob(requestHdr, sizeof(requestHdr)); break; } case Reference::ModeBatchOneway: case Reference::ModeBatchDatagram: { _proxy->__getBatchRequestQueue()->prepareBatchRequest(&_os); break; } } try { _os.write(_proxy->__reference()->getIdentity()); // // For compatibility with the old FacetPath. // if(_proxy->__reference()->getFacet().empty()) { _os.write(static_cast<string*>(0), static_cast<string*>(0)); } else { string facet = _proxy->__reference()->getFacet(); _os.write(&facet, &facet + 1); } _os.write(operation, false); _os.write(static_cast<Ice::Byte>(mode)); if(&context != &Ice::noExplicitContext) { // // Explicit context // _os.write(context); } else { // // Implicit context // const ImplicitContextIPtr& implicitContext = _proxy->__reference()->getInstance()->getImplicitContext(); const Context& prxContext = _proxy->__reference()->getContext()->getValue(); if(implicitContext == 0) { _os.write(prxContext); } else { implicitContext->write(prxContext, &_os); } } } catch(const LocalException& ex) { abort(ex); } }