diff --git a/smack-core/src/main/java/org/jivesoftware/smack/XMPPConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/XMPPConnection.java index c6c2db78f..cd7c6cf7e 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/XMPPConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/XMPPConnection.java @@ -70,6 +70,27 @@ import org.jxmpp.jid.EntityFullJid; * disconnected and then connected again. Listeners of the XMPPConnection will be retained across * connections. *

+ *

Incoming Stanza Listeners

+ * Most callbacks (listeners, handlers, …) than you can add to a connection come in three different variants: + * + *

+ * Standard callbacks are invoked concurrently, but it is ensured that the same callback is never run concurrently. + * The callback's identity is used as key for that. The events delivered to the callback preserve the order of the + * causing events of the connection. + *

+ *

+ * Asynchronous callbacks are run decoupled from the connections main event loop. Hence a callback triggered by + * stanza B may (appear to) invoked before a callback triggered by stanza A, even though stanza A arrived before B. + *

+ *

+ * Synchronous callbacks are run synchronous to the main event loop of a connection. Hence they are invoked in the + * exact order of how events happen there, most importantly the arrival order of incoming stanzas. You should only + * use synchronous callbacks in rare situations. + *

* * @author Matt Tucker * @author Guenther Niess