1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package net.sf.dexterim.msn;
20  
21  import net.sf.dexterim.msn.event.MessageEvent;
22  import net.sf.dexterim.msn.event.MessageListener;
23  import net.sf.dexterim.msn.io.BufferedMsnMessageReader;
24  import net.sf.dexterim.msn.message.MsnMessage;
25  
26  /***
27   *
28   * @author  Christoph Walcher
29   */
30  public class ReceiverThread extends Thread {
31    private BufferedMsnMessageReader messageReader;
32    private java.util.List listeners;
33    private org.apache.commons.logging.Log log;
34    private boolean stopped;
35  
36    /*** Creates a new instance of ReceiverThread */
37    public ReceiverThread(String id, BufferedMsnMessageReader messageReader) {
38      super(id);
39  
40      this.messageReader = messageReader;
41      stopped = false;
42  
43      listeners = new java.util.ArrayList();
44  
45      log = org.apache.commons.logging.LogFactory.getLog(getClass());
46    }
47  
48    public void run() {
49      while (!stopped && !messageReader.isClosed()) {
50        try {
51          MsnMessage message = this.messageReader.readMesage();
52  
53          if (message != null) {
54            fireMessageReceived(message);
55          }
56          else {
57            
58            sleep(100);
59          }
60        }
61        catch (Exception ex) {
62          if (log.isDebugEnabled()) {
63            log.debug("Exception thrown while reading from msn Network", ex);
64          }
65        }
66      }
67    }
68  
69    public void addMessageListener(MessageListener listener) {
70      listeners.add(listener);
71    }
72  
73    public void removeMessageListener(MessageListener listener) {
74      listeners.remove(listener);
75    }
76  
77    protected void fireMessageReceived(MsnMessage message) {
78      java.util.Iterator listenerIter = listeners.iterator();
79  
80      MessageEvent event = new MessageEvent(this, message);
81  
82      while (listenerIter.hasNext()) {
83        ((MessageListener)listenerIter.next()).messageReceived(event);
84      }
85    }
86  
87    public void setStopped(boolean stopped) {
88      this.stopped = stopped;
89    }
90  }