summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-10-18 16:20:20 +0000
committerMarc Laukien <marc@zeroc.com>2001-10-18 16:20:20 +0000
commita7f3ef680b8bdb1374ab031dee2cbaacb9bd6556 (patch)
tree499a7625585636e6cf9d5c2c18405ef3eec5d286 /cpp/src
parentmore facet stuff (diff)
downloadice-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.cpp4
-rw-r--r--cpp/src/Freeze/EvictorI.h4
-rw-r--r--cpp/src/Ice/Direct.cpp30
-rw-r--r--cpp/src/Ice/Incoming.cpp27
-rw-r--r--cpp/src/Ice/Proxy.cpp4
-rw-r--r--cpp/src/IcePack/Forward.cpp4
-rw-r--r--cpp/src/IcePack/Forward.h2
-rw-r--r--cpp/src/slice2cpp/Gen.cpp2
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__);";