mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-09 17:19:39 +02:00
Rework incoming packet listeners and Roster
Differentiate between asynchronous and synchronous ones. Asynchronous are the ones where the invocation order may not be the same as the order in which the stanzas arrived. Since it's no longer guaranteed that when a unit test calls processPacket(stanza) the stanza will be completely processed when the call returns, it was necessary to extend the unit tests (mostly Roster and ChatManager) with a packet listener that waits for his invocation. Since we now also use LinkedHashMaps as Map for the packet listeners (SMACK-531, SMACK-424), adding a packet listeners as last also means that it will be called as last. We exploit this behavior change now in the unit tests. Rename 'recvListeners' to 'syncRecvListeners' in AbstractXMPPConnection. Rename 'rosterInitialized' to 'loaded' in Roster. Add Roster.isLoaded(). Reset 'loaded' to false in Roster.setOfflinePresencesAndResetLoaded() (was setOfflinePresences()). Fixes SMACK-583, SMACK-532, SMACK-424
This commit is contained in:
parent
e5c6c9bdf8
commit
717090d272
39 changed files with 443 additions and 306 deletions
|
@ -101,7 +101,7 @@ public class MessageEventTest extends SmackTestCase {
|
|||
}
|
||||
}
|
||||
};
|
||||
getConnection(0).addPacketListener(packetListener, packetFilter);
|
||||
getConnection(0).addAsyncPacketListener(packetListener, packetFilter);
|
||||
|
||||
// Create the message to send with the roster
|
||||
Message msg = new Message();
|
||||
|
|
|
@ -150,7 +150,7 @@ public class XHTMLExtensionTest extends SmackTestCase {
|
|||
|
||||
}
|
||||
};
|
||||
getConnection(1).addPacketListener(packetListener, packetFilter);
|
||||
getConnection(1).addAsyncPacketListener(packetListener, packetFilter);
|
||||
|
||||
// User1 creates a message to send to user2
|
||||
Message msg = new Message();
|
||||
|
|
|
@ -215,16 +215,16 @@ public class InBandBytestreamManager implements BytestreamManager {
|
|||
|
||||
// register bytestream open packet listener
|
||||
this.initiationListener = new InitiationListener(this);
|
||||
this.connection.addPacketListener(this.initiationListener,
|
||||
this.connection.addAsyncPacketListener(this.initiationListener,
|
||||
this.initiationListener.getFilter());
|
||||
|
||||
// register bytestream data packet listener
|
||||
this.dataListener = new DataListener(this);
|
||||
this.connection.addPacketListener(this.dataListener, this.dataListener.getFilter());
|
||||
this.connection.addSyncPacketListener(this.dataListener, this.dataListener.getFilter());
|
||||
|
||||
// register bytestream close packet listener
|
||||
this.closeListener = new CloseListener(this);
|
||||
this.connection.addPacketListener(this.closeListener, this.closeListener.getFilter());
|
||||
this.connection.addSyncPacketListener(this.closeListener, this.closeListener.getFilter());
|
||||
|
||||
}
|
||||
|
||||
|
@ -548,9 +548,9 @@ public class InBandBytestreamManager implements BytestreamManager {
|
|||
managers.remove(connection);
|
||||
|
||||
// remove all listeners registered by this manager
|
||||
this.connection.removePacketListener(this.initiationListener);
|
||||
this.connection.removePacketListener(this.dataListener);
|
||||
this.connection.removePacketListener(this.closeListener);
|
||||
this.connection.removeAsyncPacketListener(this.initiationListener);
|
||||
this.connection.removeSyncPacketListener(this.dataListener);
|
||||
this.connection.removeSyncPacketListener(this.closeListener);
|
||||
|
||||
// shutdown threads
|
||||
this.initiationListener.shutdown();
|
||||
|
|
|
@ -264,7 +264,7 @@ public class InBandBytestreamSession implements BytestreamSession {
|
|||
public IBBInputStream() {
|
||||
// add data packet listener to connection
|
||||
this.dataPacketListener = getDataPacketListener();
|
||||
connection.addPacketListener(this.dataPacketListener, getDataPacketFilter());
|
||||
connection.addSyncPacketListener(this.dataPacketListener, getDataPacketFilter());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -431,7 +431,7 @@ public class InBandBytestreamSession implements BytestreamSession {
|
|||
* Invoked if the session is closed.
|
||||
*/
|
||||
private void cleanup() {
|
||||
connection.removePacketListener(this.dataPacketListener);
|
||||
connection.removeSyncPacketListener(this.dataPacketListener);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -289,7 +289,7 @@ public final class Socks5BytestreamManager implements BytestreamManager {
|
|||
public synchronized void disableService() {
|
||||
|
||||
// remove initiation packet listener
|
||||
this.connection.removePacketListener(this.initiationListener);
|
||||
this.connection.removeAsyncPacketListener(this.initiationListener);
|
||||
|
||||
// shutdown threads
|
||||
this.initiationListener.shutdown();
|
||||
|
@ -718,7 +718,7 @@ public final class Socks5BytestreamManager implements BytestreamManager {
|
|||
*/
|
||||
private void activate() {
|
||||
// register bytestream initiation packet listener
|
||||
this.connection.addPacketListener(this.initiationListener,
|
||||
this.connection.addAsyncPacketListener(this.initiationListener,
|
||||
this.initiationListener.getFilter());
|
||||
|
||||
// enable SOCKS5 feature
|
||||
|
|
|
@ -315,7 +315,7 @@ public class EntityCapsManager extends Manager {
|
|||
if (autoEnableEntityCaps)
|
||||
enableEntityCaps();
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
// Listen for remote presence stanzas with the caps extension
|
||||
// If we receive such a stanza, record the JID and nodeVer
|
||||
@Override
|
||||
|
@ -330,7 +330,7 @@ public class EntityCapsManager extends Manager {
|
|||
|
||||
}, PRESENCES_WITH_CAPS);
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
@Override
|
||||
public void processPacket(Packet packet) {
|
||||
// always remove the JID from the map, even if entityCaps are
|
||||
|
|
|
@ -148,7 +148,7 @@ public class ServiceDiscoveryManager extends Manager {
|
|||
connection().sendPacket(response);
|
||||
}
|
||||
};
|
||||
connection.addPacketListener(packetListener, GET_DISCOVER_ITEMS);
|
||||
connection.addAsyncPacketListener(packetListener, GET_DISCOVER_ITEMS);
|
||||
|
||||
// Listen for disco#info requests and answer the client's supported features
|
||||
// To add a new feature as supported use the #addFeature message
|
||||
|
@ -187,7 +187,7 @@ public class ServiceDiscoveryManager extends Manager {
|
|||
connection().sendPacket(response);
|
||||
}
|
||||
};
|
||||
connection.addPacketListener(packetListener, GET_DISCOVER_INFO);
|
||||
connection.addAsyncPacketListener(packetListener, GET_DISCOVER_INFO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -160,7 +160,7 @@ public class LastActivityManager extends Manager {
|
|||
}, PacketTypeFilter.MESSAGE);
|
||||
|
||||
// Register a listener for a last activity query
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
|
||||
public void processPacket(Packet packet) throws NotConnectedException {
|
||||
if (!enabled) return;
|
||||
|
|
|
@ -86,7 +86,7 @@ public class VersionManager extends Manager {
|
|||
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
|
||||
sdm.addFeature(Version.NAMESPACE);
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
/**
|
||||
* Sends a Version reply on request
|
||||
* @throws NotConnectedException
|
||||
|
|
|
@ -292,12 +292,12 @@ public class MultiUserChat {
|
|||
+ nickname), new PacketTypeFilter(Presence.class));
|
||||
|
||||
// Setup the messageListeners and presenceListeners *before* the join presence is send.
|
||||
connection.addPacketListener(messageListener, fromRoomGroupchatFilter);
|
||||
connection.addPacketListener(presenceListener, new AndFilter(fromRoomFilter,
|
||||
connection.addSyncPacketListener(messageListener, fromRoomGroupchatFilter);
|
||||
connection.addSyncPacketListener(presenceListener, new AndFilter(fromRoomFilter,
|
||||
PacketTypeFilter.PRESENCE));
|
||||
connection.addPacketListener(subjectListener, new AndFilter(fromRoomFilter,
|
||||
connection.addSyncPacketListener(subjectListener, new AndFilter(fromRoomFilter,
|
||||
MessageWithSubjectFilter.INSTANCE));
|
||||
connection.addPacketListener(declinesListener, new AndFilter(new PacketExtensionFilter(MUCUser.ELEMENT,
|
||||
connection.addSyncPacketListener(declinesListener, new AndFilter(new PacketExtensionFilter(MUCUser.ELEMENT,
|
||||
MUCUser.NAMESPACE), new NotFilter(MessageTypeFilter.ERROR)));
|
||||
connection.addPacketInterceptor(presenceInterceptor, new AndFilter(new ToFilter(room),
|
||||
PacketTypeFilter.PRESENCE));
|
||||
|
@ -1702,9 +1702,9 @@ public class MultiUserChat {
|
|||
* connection.
|
||||
*/
|
||||
private void removeConnectionCallbacks() {
|
||||
connection.removePacketListener(messageListener);
|
||||
connection.removePacketListener(presenceListener);
|
||||
connection.removePacketListener(declinesListener);
|
||||
connection.removeSyncPacketListener(messageListener);
|
||||
connection.removeSyncPacketListener(presenceListener);
|
||||
connection.removeSyncPacketListener(declinesListener);
|
||||
connection.removePacketInterceptor(presenceInterceptor);
|
||||
if (messageCollector != null) {
|
||||
messageCollector.cancel();
|
||||
|
|
|
@ -142,12 +142,12 @@ public class PEPManager {
|
|||
firePEPListeners(message.getFrom(), event);
|
||||
}
|
||||
};
|
||||
connection.addPacketListener(packetListener, packetFilter);
|
||||
connection.addSyncPacketListener(packetListener, packetFilter);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
if (connection != null)
|
||||
connection.removePacketListener(packetListener);
|
||||
connection.removeSyncPacketListener(packetListener);
|
||||
}
|
||||
|
||||
protected void finalize() throws Throwable {
|
||||
|
|
|
@ -127,7 +127,7 @@ public class PingManager extends Manager {
|
|||
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
|
||||
sdm.addFeature(Ping.NAMESPACE);
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
// Send a Pong for every Ping
|
||||
@Override
|
||||
public void processPacket(Packet packet) throws NotConnectedException {
|
||||
|
|
|
@ -85,7 +85,7 @@ public class PrivacyListManager extends Manager {
|
|||
private PrivacyListManager(final XMPPConnection connection) {
|
||||
super(connection);
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addSyncPacketListener(new PacketListener() {
|
||||
@Override
|
||||
public void processPacket(Packet packet) throws NotConnectedException {
|
||||
Privacy privacy = (Privacy) packet;
|
||||
|
|
|
@ -399,7 +399,7 @@ abstract public class Node
|
|||
{
|
||||
PacketListener conListener = new ItemEventTranslator(listener);
|
||||
itemEventToListenerMap.put(listener, conListener);
|
||||
con.addPacketListener(conListener, new EventContentFilter(EventElementType.items.toString(), "item"));
|
||||
con.addSyncPacketListener(conListener, new EventContentFilter(EventElementType.items.toString(), "item"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -412,7 +412,7 @@ abstract public class Node
|
|||
PacketListener conListener = itemEventToListenerMap.remove(listener);
|
||||
|
||||
if (conListener != null)
|
||||
con.removePacketListener(conListener);
|
||||
con.removeSyncPacketListener(conListener);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -425,7 +425,7 @@ abstract public class Node
|
|||
{
|
||||
PacketListener conListener = new NodeConfigTranslator(listener);
|
||||
configEventToListenerMap.put(listener, conListener);
|
||||
con.addPacketListener(conListener, new EventContentFilter(EventElementType.configuration.toString()));
|
||||
con.addSyncPacketListener(conListener, new EventContentFilter(EventElementType.configuration.toString()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -438,7 +438,7 @@ abstract public class Node
|
|||
PacketListener conListener = configEventToListenerMap .remove(listener);
|
||||
|
||||
if (conListener != null)
|
||||
con.removePacketListener(conListener);
|
||||
con.removeSyncPacketListener(conListener);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -454,7 +454,7 @@ abstract public class Node
|
|||
EventContentFilter deleteItem = new EventContentFilter(EventElementType.items.toString(), "retract");
|
||||
EventContentFilter purge = new EventContentFilter(EventElementType.purge.toString());
|
||||
|
||||
con.addPacketListener(delListener, new OrFilter(deleteItem, purge));
|
||||
con.addSyncPacketListener(delListener, new OrFilter(deleteItem, purge));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -467,7 +467,7 @@ abstract public class Node
|
|||
PacketListener conListener = itemDeleteToListenerMap .remove(listener);
|
||||
|
||||
if (conListener != null)
|
||||
con.removePacketListener(conListener);
|
||||
con.removeSyncPacketListener(conListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,7 +62,7 @@ public class DeliveryReceiptManager extends Manager implements PacketListener {
|
|||
sdm.addFeature(DeliveryReceipt.NAMESPACE);
|
||||
|
||||
// register listener for delivery receipts and requests
|
||||
connection.addPacketListener(this, new PacketExtensionFilter(DeliveryReceipt.NAMESPACE));
|
||||
connection.addAsyncPacketListener(this, new PacketExtensionFilter(DeliveryReceipt.NAMESPACE));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -72,7 +72,7 @@ public class EntityTimeManager extends Manager {
|
|||
if (autoEnable)
|
||||
enable();
|
||||
|
||||
connection.addPacketListener(new PacketListener() {
|
||||
connection.addAsyncPacketListener(new PacketListener() {
|
||||
@Override
|
||||
public void processPacket(Packet packet) throws NotConnectedException {
|
||||
if (!enabled)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue