package no.ntnu.fp.net;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Helper class implementing asynchronous handling of incoming messages. Objects
* that want to receive incoming messages register themselves as MessageListener
* to this class. The MessageListener.messageReceived() method will be called
* each time a new incoming message is received.
*
* @author Thomas Østerlie
* @version 0.1
*/
public class ReceiveWorker extends Thread {
private Connection aConnection;
private List messageListenerList;
/**
*
* @param aConnection a Connection object that is connected with remote instance
*/
public ReceiveWorker(Connection aConnection) {
this.aConnection = aConnection;
messageListenerList = new ArrayList();
}
/**
* Register a new MessageListener object
*
* @param listener the MessageListener to be registered
*/
public void addMessageListener(MessageListener listener) {
messageListenerList.add(listener);
}
/**
* Unregister a MessageListener object
*
* @param listener the MessageListener to be unregistered
*/
public void removeMessageListener(MessageListener listener) {
messageListenerList.remove(listener);
}
/**
* The worker thread.
*/
public void run() {
try {
while (true) {
String message = aConnection.receive();
Iterator iterator = messageListenerList.iterator();
while (iterator.hasNext()) {
MessageListener listener = (MessageListener)iterator.next();
listener.messageReceived(message);
}
}
} catch(Exception e) {
e.printStackTrace(); //TODO: better handling of exceptions
}
}
}