1 package org
.lwes
.listener
;
4 import org
.lwes
.util
.Log
;
7 * Dispatches events to downstream handlers using threads.
8 * @author Preston Pfarner
9 * @author Michael P. Lum
11 public class ThreadedEventDispatcher
extends Thread
{
12 /* dequeuer controlling this object */
13 private ThreadedDequeuer dequeuer
;
14 private EventHandler eventHandler
;
17 protected ThreadedEventDispatcher(ThreadedDequeuer aDequeuer
) {
18 this.dequeuer
= aDequeuer
;
20 setName("EventDispatcher");
23 public void setTask(EventHandler aHandler
, Event anEvent
) throws IllegalStateException
{
26 eventHandler
= aHandler
;
29 synchronized(this) { notifyAll(); }
31 throw new IllegalStateException("Processor already has a listener");
35 public final boolean isActive() {
39 public final boolean isIdle() {
40 final boolean p1
= (eventHandler
== null);
41 final boolean p2
= (event
== null);
42 if(p1
== p2
) return p1
;
43 else throw new IllegalStateException("Contradictory state indication");
51 eventHandler
.handleEvent(event
);
52 } catch(Exception e
) {
53 Log
.warning("Caught exception handling event", e
);
59 } catch(InterruptedException e
) {}
65 private void clearTask() {
71 dequeuer
.makeAvailable(this);