summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rwxr-xr-xcpp/src/slice2cs/Gen.cpp10
-rw-r--r--cpp/src/slice2java/Gen.cpp9
-rwxr-xr-xcpp/src/slice2vb/Gen.cpp11
3 files changed, 26 insertions, 4 deletions
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp
index 6d0b6f75272..b52f544a4ad 100755
--- a/cpp/src/slice2cs/Gen.cpp
+++ b/cpp/src/slice2cs/Gen.cpp
@@ -3360,7 +3360,6 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p)
_out << nl << "public void " << opName << "_async" << spar << paramsAMI << "Ice.Context ctx__" << epar;
_out << sb;
- _out << nl << "checkTwowayOnly__(\"" << p->name() << "\");";
_out << nl << "cb__.invoke__" << spar << "this" << argsAMI << "ctx__" << epar << ';';
_out << eb;
}
@@ -4312,6 +4311,15 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
_out << nl << "try";
_out << sb;
_out << nl << "prepare__(prx__, \"" << name << "\", " << sliceModeToIceMode(p) << ", ctx__);";
+ if(p->returnsData())
+ {
+ _out << nl << "if(!prx__.ice_isTwoway())";
+ _out << sb;
+ _out << nl << "Ice.TwowayOnlyException ex = new Ice.TwowayOnlyException();";
+ _out << nl << "ex.operation = \"" << name << "\";";
+ _out << nl << "throw ex;";
+ _out << eb;
+ }
for(q = inParams.begin(); q != inParams.end(); ++q)
{
string typeS = typeToString(q->first);
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 28a361c6a95..0e8418cf660 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -3127,8 +3127,6 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p)
out << nl << "public void" << nl << op->name() << "_async" << spar << paramsAMI << "java.util.Map __ctx"
<< epar;
out << sb;
- // Async requests may only be sent twoway.
- out << nl << "__checkTwowayOnly(\"" << p->name() << "\");";
out << nl << "__cb.__invoke" << spar << "this" << argsAMI << "__ctx" << epar << ';';
out << eb;
}
@@ -4553,6 +4551,13 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
out << nl << "try";
out << sb;
out << nl << "__prepare(__prx, \"" << p->name() << "\", " << sliceModeToIceMode(p) << ", __ctx);";
+ if(p->returnsData())
+ {
+ out << nl << "if(!__prx.ice_isTwoway())";
+ out << sb;
+ out << nl << "throw new Ice.TwowayOnlyException(\"" << p->name() << "\");";
+ out << eb;
+ }
iter = 0;
for(pli = inParams.begin(); pli != inParams.end(); ++pli)
{
diff --git a/cpp/src/slice2vb/Gen.cpp b/cpp/src/slice2vb/Gen.cpp
index f7e6c7303d1..1eb4a0ec495 100755
--- a/cpp/src/slice2vb/Gen.cpp
+++ b/cpp/src/slice2vb/Gen.cpp
@@ -3708,7 +3708,6 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p)
<< "ByVal ctx__ As Ice.Context" << epar
<< " Implements " << name << "Prx." << opName << "_async"; // TODO: should be containing class?
_out.inc();
- _out << nl << "checkTwowayOnly__(\"" << p->name() << "\")";
_out << nl << "cb__.invoke__" << spar << "Me" << argsAMI << "ctx__" << epar;
_out.dec();
_out << nl << "End Sub";
@@ -4792,6 +4791,16 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
_out << nl << "Try";
_out.inc();
_out << nl << "prepare__(prx__, \"" << p->name() << "\", " << sliceModeToIceMode(p) << ", ctx__)";
+ if(p->returnsData())
+ {
+ _out << nl << "If Not prx__.ice_isTwoway() Then";
+ _out.inc();
+ _out << nl << "Dim ex As Ice.TwowayOnlyException = New Ice.TwowayOnlyException()";
+ _out << nl << "ex.operation = \"" << p->name() << "\"";
+ _out << nl << "Throw ex";
+ _out.dec();
+ _out << nl << "End If";
+ }
for(q = inParams.begin(); q != inParams.end(); ++q)
{
string typeS = typeToString(q->first);