summaryrefslogtreecommitdiff
path: root/cppe/src/IceE/Reference.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-05-02 14:23:10 +0000
committerBenoit Foucher <benoit@zeroc.com>2007-05-02 14:23:10 +0000
commitfe95fb2662c99f5aa6763930be2dba9430aed6af (patch)
treeb4eff6ca265c3df4a83710d1563a89da9a44d7bb /cppe/src/IceE/Reference.cpp
parentModified emulator version (diff)
downloadice-fe95fb2662c99f5aa6763930be2dba9430aed6af.tar.bz2
ice-fe95fb2662c99f5aa6763930be2dba9430aed6af.tar.xz
ice-fe95fb2662c99f5aa6763930be2dba9430aed6af.zip
Added ice_getAdapterId/ice_adapterId.
Diffstat (limited to 'cppe/src/IceE/Reference.cpp')
-rw-r--r--cppe/src/IceE/Reference.cpp85
1 files changed, 72 insertions, 13 deletions
diff --git a/cppe/src/IceE/Reference.cpp b/cppe/src/IceE/Reference.cpp
index 12940e60d01..7c3c4925677 100644
--- a/cppe/src/IceE/Reference.cpp
+++ b/cppe/src/IceE/Reference.cpp
@@ -394,13 +394,14 @@ IceInternal::Reference::operator<(const Reference& r) const
}
IceInternal::Reference::Reference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident,
- const string& fs, Mode md, bool sec) :
+ const Context& context, const string& fs, Mode md, bool sec) :
_hashInitialized(false),
_instance(inst),
_communicator(com),
_mode(md),
_secure(sec),
_identity(ident),
+ _context(context),
_facet(fs),
_overrideTimeout(false),
_timeout(-1)
@@ -439,8 +440,9 @@ IceInternal::Reference::applyOverrides(vector<EndpointPtr>& endpts) const
IceUtil::Shared* IceInternal::upCast(IceInternal::FixedReference* p) { return p; }
IceInternal::FixedReference::FixedReference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident,
- const string& fs, Mode md, const vector<ConnectionPtr>& fixedConns) :
- Reference(inst, com, ident, fs, md, false),
+ const Context& context, const string& fs, Mode md,
+ const vector<ConnectionPtr>& fixedConns) :
+ Reference(inst, com, ident, context, fs, md, false),
_fixedConnections(fixedConns)
{
}
@@ -470,6 +472,19 @@ IceInternal::FixedReference::changeRouter(const RouterPrx&) const
#ifdef ICEE_HAS_LOCATOR
+string
+IceInternal::FixedReference::getAdapterId() const
+{
+ return string();
+}
+
+ReferencePtr
+IceInternal::FixedReference::changeAdapterId(const std::string&) const
+{
+ throw FixedProxyException(__FILE__, __LINE__);
+ return 0; // Keep the compiler happy.
+}
+
ReferencePtr
IceInternal::FixedReference::changeLocator(const LocatorPrx&) const
{
@@ -673,9 +688,9 @@ IceInternal::RoutableReference::operator<(const Reference& r) const
}
IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const string& fs,
+ const Identity& ident, const Context& context, const string& fs,
Mode md, bool sec, const RouterInfoPtr& rtrInfo) :
- Reference(inst, com, ident, fs, md, sec), _routerInfo(rtrInfo)
+ Reference(inst, com, ident, context, fs, md, sec), _routerInfo(rtrInfo)
{
}
@@ -690,19 +705,19 @@ IceUtil::Shared* IceInternal::upCast(IceInternal::DirectReference* p) { return p
#ifdef ICEE_HAS_ROUTER
IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const string& fs, Mode md,
+ const Identity& ident, const Context& context, const string& fs, Mode md,
bool sec, const vector<EndpointPtr>& endpts,
const RouterInfoPtr& rtrInfo) :
- RoutableReference(inst, com, ident, fs, md, sec, rtrInfo),
+ RoutableReference(inst, com, ident, context, fs, md, sec, rtrInfo),
_endpoints(endpts)
{
}
#else
IceInternal::DirectReference::DirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const string& fs, Mode md,
+ const Identity& ident, const Context& context, const string& fs, Mode md,
bool sec, const vector<EndpointPtr>& endpts) :
- Reference(inst, com, ident, fs, md, sec),
+ Reference(inst, com, ident, context, fs, md, sec),
_endpoints(endpts)
{
}
@@ -722,6 +737,32 @@ IceInternal::DirectReference::getEndpoints() const
#ifdef ICEE_HAS_LOCATOR
+string
+IceInternal::DirectReference::getAdapterId() const
+{
+ return string();
+}
+
+ReferencePtr
+DirectReference::changeAdapterId(const string& newAdapterId) const
+{
+ if(!newAdapterId.empty())
+ {
+ LocatorInfoPtr locatorInfo =
+ getInstance()->locatorManager()->get(getInstance()->referenceFactory()->getDefaultLocator());
+ return getInstance()->referenceFactory()->create(getIdentity(), *getContext(), getFacet(), getMode(),
+ getSecure(), newAdapterId,
+#ifdef ICEE_HAS_ROUTER
+ getRouterInfo(),
+#endif
+ locatorInfo);
+ }
+ else
+ {
+ return DirectReferencePtr(const_cast<DirectReference*>(this));
+ }
+}
+
ReferencePtr
IceInternal::DirectReference::changeLocator(const LocatorPrx& newLocator) const
{
@@ -878,20 +919,20 @@ IceUtil::Shared* IceInternal::upCast(IceInternal::IndirectReference* p) { return
#ifdef ICEE_HAS_ROUTER
IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const string& fs,
+ const Identity& ident, const Context& context, const string& fs,
Mode md, bool sec, const string& adptid,
const RouterInfoPtr& rtrInfo, const LocatorInfoPtr& locInfo) :
- RoutableReference(inst, com, ident, fs, md, sec, rtrInfo),
+ RoutableReference(inst, com, ident, context, fs, md, sec, rtrInfo),
_adapterId(adptid),
_locatorInfo(locInfo)
{
}
#else
IceInternal::IndirectReference::IndirectReference(const InstancePtr& inst, const CommunicatorPtr& com,
- const Identity& ident, const string& fs,
+ const Identity& ident, const Context& context, const string& fs,
Mode md, bool sec, const string& adptid,
const LocatorInfoPtr& locInfo) :
- Reference(inst, com, ident, fs, md, sec),
+ Reference(inst, com, ident, context, fs, md, sec),
_adapterId(adptid),
_locatorInfo(locInfo)
{
@@ -910,6 +951,24 @@ IceInternal::IndirectReference::getEndpoints() const
return vector<EndpointPtr>();
}
+string
+IceInternal::IndirectReference::getAdapterId() const
+{
+ return _adapterId;
+}
+
+ReferencePtr
+IceInternal::IndirectReference::changeAdapterId(const string& newAdapterId) const
+{
+ if(newAdapterId == _adapterId)
+ {
+ return IndirectReferencePtr(const_cast<IndirectReference*>(this));
+ }
+ IndirectReferencePtr r = IndirectReferencePtr::dynamicCast(getInstance()->referenceFactory()->copy(this));
+ r->_adapterId = newAdapterId;
+ return r;
+}
+
ReferencePtr
IceInternal::IndirectReference::changeLocator(const LocatorPrx& newLocator) const
{