浏览代码

smacks: Unregister smack stanza handlers on disconnect

JC Brand 4 年之前
父节点
当前提交
fb773d5d9b
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      src/headless/converse-smacks.js

+ 9 - 4
src/headless/converse-smacks.js

@@ -187,6 +187,8 @@ async function sendEnableStanza () {
     }
 }
 
+const smacks_handlers = [];
+
 async function enableStreamManagement () {
     if (!api.settings.get('enable_smacks')) {
         return;
@@ -194,9 +196,13 @@ async function enableStreamManagement () {
     if (!(await isStreamManagementSupported())) {
         return;
     }
-    _converse.connection.addHandler(stanzaHandler);
-    _converse.connection.addHandler(sendAck, Strophe.NS.SM, 'r');
-    _converse.connection.addHandler(handleAck, Strophe.NS.SM, 'a');
+    const conn = _converse.connection;
+    while (smacks_handlers.length) {
+        conn.deleteHandler(smacks_handlers.pop());
+    }
+    smacks_handlers.push(conn.addHandler(stanzaHandler));
+    smacks_handlers.push(conn.addHandler(sendAck, Strophe.NS.SM, 'r'));
+    smacks_handlers.push(conn.addHandler(handleAck, Strophe.NS.SM, 'a'));
     if (_converse.session.get('smacks_stream_id')) {
         await sendResumeStanza();
     } else {
@@ -237,7 +243,6 @@ function onStanzaSent (stanza) {
 converse.plugins.add('converse-smacks', {
 
     initialize () {
-
         // Configuration values for this plugin
         // ====================================
         // Refer to docs/source/configuration.rst for explanations of these