diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-05-14 21:17:57 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-05-14 21:17:57 +0000 |
commit | fd470410eafeacaa25a675673ef05c5cb20db1ba (patch) | |
tree | 3d352ebd214909c4fa8a1536f26f918f6d48094e /java/src/Ice/ObjectImpl.java | |
parent | Bug 1998 (diff) | |
download | ice-fd470410eafeacaa25a675673ef05c5cb20db1ba.tar.bz2 ice-fd470410eafeacaa25a675673ef05c5cb20db1ba.tar.xz ice-fd470410eafeacaa25a675673ef05c5cb20db1ba.zip |
Java dispatch interceptor (see bug #2126)
Diffstat (limited to 'java/src/Ice/ObjectImpl.java')
-rw-r--r-- | java/src/Ice/ObjectImpl.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/java/src/Ice/ObjectImpl.java b/java/src/Ice/ObjectImpl.java index a7db871c016..970efadc15a 100644 --- a/java/src/Ice/ObjectImpl.java +++ b/java/src/Ice/ObjectImpl.java @@ -156,6 +156,35 @@ public abstract class ObjectImpl implements Object, java.lang.Cloneable }; public IceInternal.DispatchStatus + ice_dispatch(Request request, DispatchInterceptorAsyncCallback cb) + { + if(request.isCollocated()) + { + return __collocDispatch((IceInternal.Direct)request); + } + else + { + IceInternal.Incoming in = (IceInternal.Incoming)request; + if(cb != null) + { + in.push(cb); + } + try + { + in.startOver(); // may raise ResponseSentException + return __dispatch(in, in.getCurrent()); + } + finally + { + if(cb != null) + { + in.pop(); + } + } + } + } + + public IceInternal.DispatchStatus __dispatch(IceInternal.Incoming in, Current current) { int pos = java.util.Arrays.binarySearch(__all, current.operation); @@ -187,6 +216,13 @@ public abstract class ObjectImpl implements Object, java.lang.Cloneable assert(false); return IceInternal.DispatchStatus.DispatchOperationNotExist; } + + public IceInternal.DispatchStatus + __collocDispatch(IceInternal.Direct request) + { + return request.run(this); + } + public void __write(IceInternal.BasicStream __os) |