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 }