git » sdk » commit be7f78b

Detect resume sooner

author Stephen Paul Weber
2024-10-02 18:07:33 UTC
committer Stephen Paul Weber
2024-10-02 18:07:33 UTC
parent fcea0733a63002361d062b48800e6eade72b8954

Detect resume sooner

Instead of waiting for a stanza, we can catch the first non-SM item
after online, which should be the stream features usually.

snikket/streams/XmppJsStream.hx +6 -1

diff --git a/snikket/streams/XmppJsStream.hx b/snikket/streams/XmppJsStream.hx
index 3bea39c..7b3fc21 100644
--- a/snikket/streams/XmppJsStream.hx
+++ b/snikket/streams/XmppJsStream.hx
@@ -30,6 +30,7 @@ extern class XmppJsClient {
 		get: (String, String, ({stanza: XmppJsXml})->Any)->Void,
 		set: (String, String, ({stanza: XmppJsXml})->Any)->Void,
 	};
+	var middleware: { use:(({stanza: XmppJsXml})->Void)->Void };
 	var streamFeatures: { use:(String,String,({}, ()->Void, XmppJsXml)->Void)->Void };
 	var streamManagement: { id:String, outbound: Int, inbound: Int, outbound_q: Array<XmppJsXml>, enabled: Bool, allowResume: Bool };
 	var sasl2: Dynamic;
@@ -216,7 +217,8 @@ class XmppJsStream extends GenericStream {
 			this.state.event("connection-closed");
 		});
 
-		xmpp.on("stanza", function (stanza) {
+		xmpp.middleware.use(function (data) {
+			if (data.stanza.attrs.xmlns == "urn:xmpp:sm:3") return;
 			if (xmpp.status == "online" && this.state.can("connection-success")) {
 				resumed = xmpp.streamManagement.enabled && xmpp.streamManagement.id != null && xmpp.streamManagement.id != "";
 				if (xmpp.jid == null) {
@@ -226,6 +228,9 @@ class XmppJsStream extends GenericStream {
 				}
 				this.state.event("connection-success");
 			}
+		});
+
+		xmpp.on("stanza", function (stanza) {
 			this.onStanza(convertToStanza(stanza));
 			triggerSMupdate();
 		});