1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-27 00:32:07 +01:00

Another collection change.

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7168 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Matt Tucker 2007-02-16 01:56:16 +00:00 committed by matt
parent 7ebaba10e2
commit e155c302ad

View file

@ -31,9 +31,7 @@ import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.Semaphore; import java.util.concurrent.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.CopyOnWriteArrayList;
/** /**
* Listens for XML traffic from the XMPP server and parses it into packet objects. * Listens for XML traffic from the XMPP server and parses it into packet objects.
@ -51,9 +49,9 @@ class PacketReader {
private XMPPConnection connection; private XMPPConnection connection;
private XmlPullParser parser; private XmlPullParser parser;
private boolean done; private boolean done;
private List<PacketCollector> collectors = new CopyOnWriteArrayList<PacketCollector>(); private Collection<PacketCollector> collectors = new ConcurrentLinkedQueue<PacketCollector>();
protected final List<ListenerWrapper> listeners = new CopyOnWriteArrayList<ListenerWrapper>(); protected final Map<PacketListener, ListenerWrapper> listeners = new ConcurrentHashMap<PacketListener, ListenerWrapper>();
protected final List<ConnectionListener> connectionListeners = protected final Collection<ConnectionListener> connectionListeners =
new CopyOnWriteArrayList<ConnectionListener>(); new CopyOnWriteArrayList<ConnectionListener>();
private String connectionID = null; private String connectionID = null;
@ -123,7 +121,7 @@ class PacketReader {
*/ */
public void addPacketListener(PacketListener packetListener, PacketFilter packetFilter) { public void addPacketListener(PacketListener packetListener, PacketFilter packetFilter) {
ListenerWrapper wrapper = new ListenerWrapper(this, packetListener, packetFilter); ListenerWrapper wrapper = new ListenerWrapper(this, packetListener, packetFilter);
listeners.add(wrapper); listeners.put(packetListener, wrapper);
} }
/** /**
@ -132,16 +130,11 @@ class PacketReader {
* @param packetListener the packet listener to remove. * @param packetListener the packet listener to remove.
*/ */
public void removePacketListener(PacketListener packetListener) { public void removePacketListener(PacketListener packetListener) {
// Find the index of the wrapper in the list of listeners. This operation will ListenerWrapper wrapper = listeners.remove(packetListener);
// work because of a special equals() implementation in the ListenerWrapper class. if (wrapper != null) {
int index = listeners.indexOf(packetListener);
if (index == -1) {
return;
}
ListenerWrapper wrapper = listeners.remove(index);
// Cancel the wrapper since it's been removed.
wrapper.cancel(); wrapper.cancel();
} }
}
/** /**
* Starts the packet reader thread and returns once a connection to the server * Starts the packet reader thread and returns once a connection to the server
@ -285,7 +278,7 @@ class PacketReader {
private void processListeners(Thread thread) { private void processListeners(Thread thread) {
while (!done && thread == listenerThread) { while (!done && thread == listenerThread) {
boolean processedPacket = false; boolean processedPacket = false;
for (ListenerWrapper wrapper: listeners) { for (ListenerWrapper wrapper: listeners.values()) {
processedPacket = processedPacket || wrapper.notifyListener(); processedPacket = processedPacket || wrapper.notifyListener();
} }
if (!processedPacket) { if (!processedPacket) {