summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Proxy.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-11-29 20:59:01 +0000
committerMarc Laukien <marc@zeroc.com>2001-11-29 20:59:01 +0000
commit24f0596311d7c1d22c032505f13da24fbf5d5ad1 (patch)
treebe28204ca3861f9accd3fb4b1051c8fb03cb02fc /cpp/src/Ice/Proxy.cpp
parentinitial check-in (diff)
downloadice-24f0596311d7c1d22c032505f13da24fbf5d5ad1.tar.bz2
ice-24f0596311d7c1d22c032505f13da24fbf5d5ad1.tar.xz
ice-24f0596311d7c1d22c032505f13da24fbf5d5ad1.zip
ice_invoke
Diffstat (limited to 'cpp/src/Ice/Proxy.cpp')
-rw-r--r--cpp/src/Ice/Proxy.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 00f3f1a8173..d803cd8f8b8 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -151,8 +151,11 @@ IceProxy::Ice::Object::ice_ping(const Context& __context)
}
void
-IceProxy::Ice::Object::ice_invokeIn(const string& operation, bool nonmutating, const vector<Byte>& inParams,
- const Context& __context)
+IceProxy::Ice::Object::ice_invoke(const string& operation,
+ bool nonmutating,
+ const vector<Byte>& inParams,
+ vector<Byte>& outParams,
+ const Context& __context)
{
int __cnt = 0;
while (true)
@@ -160,13 +163,17 @@ IceProxy::Ice::Object::ice_invokeIn(const string& operation, bool nonmutating, c
try
{
Handle< ::IceDelegate::Ice::Object> __del = __getDelegate();
- __del->ice_invokeIn(operation, inParams, __context);
+ __del->ice_invoke(operation, inParams, outParams, __context);
return;
}
+// For routers, we want to propagate location forwards to the caller.
+// TODO: Should this be configurable?
+/*
catch (const LocationForward& __ex)
{
__locationForward(__ex);
}
+*/
catch (const NonRepeatable& __ex)
{
if (nonmutating)
@@ -533,15 +540,20 @@ IceDelegateM::Ice::Object::ice_ping(const Context& __context)
}
void
-IceDelegateM::Ice::Object::ice_invokeIn(const string& operation, const vector<Byte>& inParams,
- const Context& __context)
+IceDelegateM::Ice::Object::ice_invoke(const string& operation,
+ const vector<Byte>& inParams,
+ vector<Byte>& outParams,
+ const Context& __context)
{
Outgoing __out(__emitter, __reference, operation.c_str(), __context);
BasicStream* __os = __out.os();
__os->writeBlob(inParams);
- if (!__out.invoke())
+ __out.invoke();
+ if (__reference->mode == Reference::ModeTwoway)
{
- throw ::Ice::UnknownUserException(__FILE__, __LINE__);
+ BasicStream* __is = __out.is();
+ Int sz = __is->getReadEncapsSize();
+ __is->readBlob(outParams, sz);
}
}
@@ -653,8 +665,10 @@ IceDelegateD::Ice::Object::ice_ping(const ::Ice::Context& __context)
}
void
-IceDelegateD::Ice::Object::ice_invokeIn(const string& operation, const vector<Byte>& inParams,
- const ::Ice::Context& context)
+IceDelegateD::Ice::Object::ice_invoke(const string& operation,
+ const vector<Byte>& inParams,
+ vector<Byte>& outParams,
+ const ::Ice::Context& context)
{
Current __current;
__initCurrent(__current, operation, context);
@@ -666,7 +680,7 @@ IceDelegateD::Ice::Object::ice_invokeIn(const string& operation, const vector<By
}
try
{
- __servant->ice_invokeIn(inParams, __current);
+ __servant->ice_invoke(inParams, outParams, __current);
}
catch (const LocalException&)
{
@@ -707,4 +721,3 @@ IceDelegateD::Ice::Object::setup(const ReferencePtr& ref, const ObjectAdapterPtr
__reference = ref;
__adapter = adapter;
}
-