diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2007-01-17 18:11:11 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2007-01-17 18:11:11 +0000 |
commit | e124e693704faa56ecf32ce2a243d0c3fa3a5e6e (patch) | |
tree | 071dcaa6edc458f9371289976a4537880e5bb005 /java/demo/Ice/async/WorkQueue.java | |
parent | Changed async demo (diff) | |
download | ice-e124e693704faa56ecf32ce2a243d0c3fa3a5e6e.tar.bz2 ice-e124e693704faa56ecf32ce2a243d0c3fa3a5e6e.tar.xz ice-e124e693704faa56ecf32ce2a243d0c3fa3a5e6e.zip |
Changed demo
Diffstat (limited to 'java/demo/Ice/async/WorkQueue.java')
-rw-r--r-- | java/demo/Ice/async/WorkQueue.java | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/java/demo/Ice/async/WorkQueue.java b/java/demo/Ice/async/WorkQueue.java new file mode 100644 index 00000000000..036a1978b49 --- /dev/null +++ b/java/demo/Ice/async/WorkQueue.java @@ -0,0 +1,115 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +import Demo.*; + +public class WorkQueue extends Thread +{ + class CallbackEntry + { + AMD_Hello_sayHello cb; + int delay; + } + + public synchronized void + run() + { + while(!_done) + { + if(_callbacks.size() == 0) + { + try + { + wait(); + } + catch(java.lang.InterruptedException ex) + { + } + } + + if(_callbacks.size() != 0) + { + // + // Get next work item. + // + CallbackEntry entry = (CallbackEntry)_callbacks.getFirst(); + + // + // Wait for the amount of time indicated in delay to + // emulate a process that takes a significant period of + // time to complete. + // + try + { + wait(entry.delay); + } + catch(java.lang.InterruptedException ex) + { + } + + if(!_done) + { + // + // Print greeting and send response. + // + _callbacks.removeFirst(); + System.err.println("Belated Hello World!"); + entry.cb.ice_response(); + } + } + } + + // + // Throw exception for any outstanding requests. + // + java.util.Iterator p = _callbacks.iterator(); + while(p.hasNext()) + { + CallbackEntry entry = (CallbackEntry)p.next(); + entry.cb.ice_exception(new RequestCanceledException()); + } + } + + public synchronized void + add(AMD_Hello_sayHello cb, int delay) + { + if(!_done) + { + // + // Add the work item. + // + CallbackEntry entry = new CallbackEntry(); + entry.cb = cb; + entry.delay = delay; + + if(_callbacks.size() == 0) + { + notify(); + } + _callbacks.add(entry); + } + else + { + // + // Destroyed, throw exception. + // + cb.ice_exception(new RequestCanceledException()); + } + } + + public synchronized void + destroy() + { + _done = true; + notify(); + } + + private java.util.LinkedList _callbacks = new java.util.LinkedList(); + private boolean _done = false; +} |