diff options
Diffstat (limited to 'cpp')
-rwxr-xr-x | cpp/src/slice2cs/Gen.cpp | 10 | ||||
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 9 | ||||
-rwxr-xr-x | cpp/src/slice2vb/Gen.cpp | 11 |
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); |