1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-10 17:49:38 +02:00

Initial work on ChatState.

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@6215 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Alex Wenckus 2006-11-23 01:51:00 +00:00 committed by alex
parent ae6065d7cc
commit 3269d65591
10 changed files with 288 additions and 67 deletions

View file

@ -22,9 +22,9 @@ package org.jivesoftware.smack;
import org.jivesoftware.smack.packet.Message;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.Set;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.CopyOnWriteArraySet;
/**
@ -42,8 +42,7 @@ public class Chat {
private ChatManager chatManager;
private String threadID;
private String participant;
private final Set<WeakReference<PacketListener>> listeners =
new CopyOnWriteArraySet<WeakReference<PacketListener>>();
private final Set<PacketListener> listeners = new CopyOnWriteArraySet<PacketListener>();
/**
* Creates a new chat with the specified user and thread ID.
@ -124,7 +123,20 @@ public class Chat {
if(listener == null) {
return;
}
listeners.add(new WeakReference<PacketListener>(listener));
listeners.add(listener);
}
public void removeMessageListener(PacketListener listener) {
listeners.remove(listener);
}
/**
* Returns an unmodifiable collection of all of the listeners registered with this chat.
*
* @return an unmodifiable collection of all of the listeners registered with this chat.
*/
public Collection<PacketListener> getListeners() {
return Collections.unmodifiableCollection(listeners);
}
/**
@ -152,16 +164,8 @@ public class Chat {
// probably never had one.
message.setThread(threadID);
for (Iterator<WeakReference<PacketListener>> i = listeners.iterator(); i.hasNext();) {
WeakReference<PacketListener> listenerRef = i.next();
PacketListener listener;
if ((listener = listenerRef.get()) != null) {
listener.processPacket(message);
}
// If the reference was cleared, remove it from the set.
else {
i.remove();
}
for (PacketListener listener : listeners) {
listener.processPacket(message);
}
}
}