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

Listeners are now removed from PacketReader. SMACK-165

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@4883 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Gaston Dombiak 2006-08-10 22:09:30 +00:00 committed by gato
parent 469ff4d487
commit 157a1e9659
2 changed files with 50 additions and 7 deletions

View file

@ -50,7 +50,7 @@ class PacketReader {
private boolean done = false; private boolean done = false;
private final VolatileMemberCollection<PacketCollector> collectors = private final VolatileMemberCollection<PacketCollector> collectors =
new VolatileMemberCollection<PacketCollector>(50); new VolatileMemberCollection<PacketCollector>(50);
private final VolatileMemberCollection listeners = new VolatileMemberCollection(50); protected final VolatileMemberCollection listeners = new VolatileMemberCollection(50);
protected final List<ConnectionListener> connectionListeners = protected final List<ConnectionListener> connectionListeners =
new ArrayList<ConnectionListener>(); new ArrayList<ConnectionListener>();
@ -814,10 +814,13 @@ class PacketReader {
public void remove(E member) { public void remove(E member) {
synchronized (mutex) { synchronized (mutex) {
int index = collectors.lastIndexOf(member); for (int i = collectors.size()-1; i >= 0; i--) {
if (index >= 0) { E element = collectors.get(i);
collectors.set(index, null); if (element != null && element.equals(member)) {
nullArray[++nullIndex] = index; collectors.set(i, null);
nullArray[++nullIndex] = i;
return;
}
} }
} }
} }
@ -860,6 +863,21 @@ class PacketReader {
} }
}; };
} }
/**
* Returns the number of elements in this collection.
*
* @return the number of elements in this collection
*/
public int size() {
int size = 0;
for (E element : collectors) {
if (element != null) {
size++;
}
}
return size;
}
} }
/** /**

View file

@ -52,8 +52,10 @@
package org.jivesoftware.smack; package org.jivesoftware.smack;
import org.jivesoftware.smack.filter.*; import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.packet.*; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.MockPacketFilter;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.test.SmackTestCase; import org.jivesoftware.smack.test.SmackTestCase;
@ -96,6 +98,29 @@ public class PacketReaderTest extends SmackTestCase {
collector.cancel(); collector.cancel();
} }
/**
* Tests that PacketReader adds new listeners and also removes them correctly.
*/
public void testRemoveListener() {
PacketListener listener = new PacketListener() {
public void processPacket(Packet packet) {
//Ignore
}
};
// Keep number of current listeners
int listenersSize = getConnection(0).packetReader.listeners.size();
// Add a new listener
getConnection(0).addPacketListener(listener, new MockPacketFilter(true));
// Check that the listener was added
assertEquals("Listener was not added", listenersSize + 1,
getConnection(0).packetReader.listeners.size());
// Remove the listener
getConnection(0).removePacketListener(listener);
// Check that the number of listeners is correct (i.e. the listener was removed)
assertEquals("Listener was not removed", listenersSize,
getConnection(0).packetReader.listeners.size());
}
protected int getMaxConnections() { protected int getMaxConnections() {
return 2; return 2;
} }