diff options
author | Marc Laukien <marc@zeroc.com> | 2001-10-18 16:20:20 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-10-18 16:20:20 +0000 |
commit | a7f3ef680b8bdb1374ab031dee2cbaacb9bd6556 (patch) | |
tree | 499a7625585636e6cf9d5c2c18405ef3eec5d286 /cpp/src | |
parent | more facet stuff (diff) | |
download | ice-a7f3ef680b8bdb1374ab031dee2cbaacb9bd6556.tar.bz2 ice-a7f3ef680b8bdb1374ab031dee2cbaacb9bd6556.tar.xz ice-a7f3ef680b8bdb1374ab031dee2cbaacb9bd6556.zip |
more and more facet stuff...
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Freeze/EvictorI.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Freeze/EvictorI.h | 4 | ||||
-rw-r--r-- | cpp/src/Ice/Direct.cpp | 30 | ||||
-rw-r--r-- | cpp/src/Ice/Incoming.cpp | 27 | ||||
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IcePack/Forward.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IcePack/Forward.h | 2 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 2 |
8 files changed, 48 insertions, 29 deletions
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp index 553c29c69e5..1a593bf107a 100644 --- a/cpp/src/Freeze/EvictorI.cpp +++ b/cpp/src/Freeze/EvictorI.cpp @@ -252,8 +252,8 @@ Freeze::EvictorI::locate(const ObjectAdapterPtr& adapter, const string& identity } void -Freeze::EvictorI::finished(const ObjectAdapterPtr&, const string& identity, const ObjectPtr& servant, - const string& operation, const LocalObjectPtr& cookie) +Freeze::EvictorI::finished(const ObjectAdapterPtr&, const string& identity, const string& operation, + const ObjectPtr& servant, const LocalObjectPtr& cookie) { JTCSyncT<JTCMutex> sync(*this); diff --git a/cpp/src/Freeze/EvictorI.h b/cpp/src/Freeze/EvictorI.h index 2bb418e8e9d..97cad50540f 100644 --- a/cpp/src/Freeze/EvictorI.h +++ b/cpp/src/Freeze/EvictorI.h @@ -39,8 +39,8 @@ public: virtual Ice::ObjectPtr locate(const Ice::ObjectAdapterPtr&, const std::string&, const std::string&, Ice::LocalObjectPtr&); - virtual void finished(const Ice::ObjectAdapterPtr&, const std::string&, const Ice::ObjectPtr&, const std::string&, - const Ice::LocalObjectPtr&); + virtual void finished(const Ice::ObjectAdapterPtr&, const std::string&, const std::string&, + const Ice::ObjectPtr&, const Ice::LocalObjectPtr&); virtual void deactivate(); private: diff --git a/cpp/src/Ice/Direct.cpp b/cpp/src/Ice/Direct.cpp index 65feb32a9b5..f2345a3ada8 100644 --- a/cpp/src/Ice/Direct.cpp +++ b/cpp/src/Ice/Direct.cpp @@ -49,12 +49,21 @@ IceInternal::Direct::Direct(const ObjectAdapterPtr& adapter, const ReferencePtr& _servant = _locator->locate(_adapter, _reference->identity, _operation, _cookie); } } + + if (_servant && !ref->facet.empty()) + { + _facetServant = _servant->_findFacet(ref->facet); + if (!_facetServant) + { + throw FacetNotExistException(__FILE__, __LINE__); + } + } } catch(...) { if (_locator && _servant) { - _locator->finished(_adapter, _reference->identity, _servant, _operation, _cookie); + _locator->finished(_adapter, _reference->identity, _operation, _servant, _cookie); } throw; } @@ -63,24 +72,25 @@ IceInternal::Direct::Direct(const ObjectAdapterPtr& adapter, const ReferencePtr& { throw ObjectNotExistException(__FILE__, __LINE__); } - - if(!ref->facet.empty()) - { - // Not implemented yet - throw FacetNotExistException(__FILE__, __LINE__); - } } IceInternal::Direct::~Direct() { if (_locator && _servant) { - _locator->finished(_adapter, _reference->identity, _servant, _operation, _cookie); + _locator->finished(_adapter, _reference->identity, _operation, _servant, _cookie); } } const ObjectPtr& -IceInternal::Direct::servant() +IceInternal::Direct::facetServant() { - return _servant; + if (_facetServant) + { + return _facetServant; + } + else + { + return _servant; + } } diff --git a/cpp/src/Ice/Incoming.cpp b/cpp/src/Ice/Incoming.cpp index f47af9840aa..f8d04ba5bf7 100644 --- a/cpp/src/Ice/Incoming.cpp +++ b/cpp/src/Ice/Incoming.cpp @@ -71,17 +71,26 @@ IceInternal::Incoming::invoke(BasicStream& is) servant = locator->locate(_adapter, identity, operation, cookie); } } - + if(!servant) { _os.write(static_cast<Byte>(DispatchObjectNotExist)); } else { - if(!facet.empty()) + if (!facet.empty()) { - // Not implemented yet - _os.write(static_cast<Byte>(DispatchFacetNotExist)); + ObjectPtr facetServant = servant->_findFacet(facet); + if (!facetServant) + { + _os.write(static_cast<Byte>(DispatchFacetNotExist)); + } + else + { + _os.write(static_cast<Byte>(DispatchOK)); + DispatchStatus status = facetServant->__dispatch(*this, operation); + *(_os.b.begin() + statusPos) = static_cast<Byte>(status); + } } else { @@ -93,14 +102,14 @@ IceInternal::Incoming::invoke(BasicStream& is) if (locator && servant) { - locator->finished(_adapter, identity, servant, operation, cookie); + locator->finished(_adapter, identity, operation, servant, cookie); } } catch (const LocationForward& ex) { if (locator && servant) { - locator->finished(_adapter, identity, servant, operation, cookie); + locator->finished(_adapter, identity, operation, servant, cookie); } _os.b.resize(statusPos); _os.write(static_cast<Byte>(DispatchLocationForward)); @@ -111,7 +120,7 @@ IceInternal::Incoming::invoke(BasicStream& is) { if (locator && servant) { - locator->finished(_adapter, identity, servant, operation, cookie); + locator->finished(_adapter, identity, operation, servant, cookie); } _os.b.resize(statusPos); _os.write(static_cast<Byte>(DispatchUnknownLocalException)); @@ -121,7 +130,7 @@ IceInternal::Incoming::invoke(BasicStream& is) { if (locator && servant) { - locator->finished(_adapter, identity, servant, operation, cookie); + locator->finished(_adapter, identity, operation, servant, cookie); } _os.b.resize(statusPos); _os.write(static_cast<Byte>(DispatchUnknownUserException)); @@ -131,7 +140,7 @@ IceInternal::Incoming::invoke(BasicStream& is) { if (locator && servant) { - locator->finished(_adapter, identity, servant, operation, cookie); + locator->finished(_adapter, identity, operation, servant, cookie); } _os.b.resize(statusPos); _os.write(static_cast<Byte>(DispatchUnknownException)); diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 496ffb279be..6632e23efa4 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -559,14 +559,14 @@ bool IceDelegateD::Ice::Object::_isA(const string& s) { Direct __direct(__adapter, __reference, "_isA"); - return __direct.servant()->_isA(s); + return __direct.facetServant()->_isA(s); } void IceDelegateD::Ice::Object::_ping() { Direct __direct(__adapter, __reference, "_ping"); - __direct.servant()->_ping(); + __direct.facetServant()->_ping(); } void diff --git a/cpp/src/IcePack/Forward.cpp b/cpp/src/IcePack/Forward.cpp index 4e2a6f48c78..6d1cc96c6a2 100644 --- a/cpp/src/IcePack/Forward.cpp +++ b/cpp/src/IcePack/Forward.cpp @@ -159,8 +159,8 @@ IcePack::Forward::locate(const ObjectAdapterPtr& adapter, const string& identity } void -IcePack::Forward::finished(const ObjectAdapterPtr&, const string&, const ObjectPtr&, const string&, - const LocalObjectPtr&) +IcePack::Forward::finished(const ObjectAdapterPtr&, const string&, const string&, + const ObjectPtr&, const LocalObjectPtr&) { // Nothing to do } diff --git a/cpp/src/IcePack/Forward.h b/cpp/src/IcePack/Forward.h index 42eb605af6d..daf7d72d5e3 100644 --- a/cpp/src/IcePack/Forward.h +++ b/cpp/src/IcePack/Forward.h @@ -28,7 +28,7 @@ public: virtual Ice::ObjectPtr locate(const Ice::ObjectAdapterPtr&, const std::string&, const std::string&, Ice::LocalObjectPtr&); - virtual void finished(const Ice::ObjectAdapterPtr&, const std::string&, const Ice::ObjectPtr&, const std::string&, + virtual void finished(const Ice::ObjectAdapterPtr&, const std::string&, const std::string&, const Ice::ObjectPtr&, const Ice::LocalObjectPtr&); virtual void deactivate(); diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index f8ee945c781..32e8434eb02 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -1338,7 +1338,7 @@ Slice::Gen::DelegateDVisitor::visitOperation(const OperationPtr& p) C << sp << nl << retS << nl << "IceDelegateD" << scoped << paramsDecl; C << sb; C << nl << "::IceInternal::Direct __direct(__adapter, __reference, \"" << name << "\");"; - C << nl << cl->scoped() << "* __servant = dynamic_cast< " << cl->scoped() << "*>(__direct.servant().get());"; + C << nl << cl->scoped() << "* __servant = dynamic_cast< " << cl->scoped() << "*>(__direct.facetServant().get());"; C << nl << "if (!__servant)"; C << sb; C << nl << "throw ::Ice::OperationNotExistException(__FILE__, __LINE__);"; |