19 import java.io.IOException;
24 class WriterThread
extends Thread {
25 private VFieldOutputStream output;
26 private MessageQueue transientMessages =
new MessageQueue();
27 private MessageQueue messages =
new MessageQueue();
28 private boolean running;
29 private boolean timerSet;
31 private static final long TIMEOUT = 100;
32 private WriterThreadObserver observer;
34 WriterThread(VFieldOutputStream output, WriterThreadObserver observer) {
36 this.observer = observer;
46 long t = timeout - System.currentTimeMillis();
51 if (timerSet && System.currentTimeMillis() > timeout) {
54 Message msg = transientMessages.dequeue();
55 if (msg == null)
break;
56 messages.enqueue(msg);
66 Message msg = messages.dequeue();
67 if (msg == null)
break;
70 }
catch (InterruptedException e) {
80 public synchronized void send(Message msg)
83 messages.enqueue(msg);
84 }
else if (timerSet) {
85 transientMessages.enqueueUnique(msg);
87 messages.enqueue(msg);
88 timeout = System.currentTimeMillis() + TIMEOUT;
96 public synchronized void stopThread()
104 private void sendMessage(Message message)
107 output.writeInt(message.id);
108 output.writeShort(message.field);
109 output.writeField(message.value);
111 }
catch (IOException e) {