From 6b483195cb1e69644401719e9a85eb3b0f493589 Mon Sep 17 00:00:00 2001 From: lilia Date: Wed, 9 Sep 2015 01:45:15 -0700 Subject: [PATCH] Fix reconnect bugs from previous commit Forgot to bind the socket event handler, and the then() handler should come before the catch() handler or else it will execute every time the catch handler executes. // FREEBIE --- js/libtextsecure.js | 21 ++++++++++++--------- libtextsecure/message_receiver.js | 21 ++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 724ffb884..462c68f00 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -39383,28 +39383,31 @@ function generateKeys(count, progressCallback) { window.textsecure = window.textsecure || {}; function MessageReceiver(url, eventTarget) { + this.url = url; if (eventTarget instanceof EventTarget) { this.target = eventTarget; } else { throw new TypeError('MessageReceiver expected an EventTarget'); } - this.connect(url); + this.connect(); } MessageReceiver.prototype = { constructor: MessageReceiver, - connect: function(url) { + connect: function() { var eventTarget = this.target; // initialize the socket and start listening for messages - this.socket = TextSecureServer.getMessageWebsocket(url); + this.socket = TextSecureServer.getMessageWebsocket(this.url); this.socket.onclose = function(e) { // possible 403. Make a request to confirm - TextSecureServer.getDevices(textsecure.storage.user.getNumber()).catch(function(e) { - var ev = new Event('textsecure:error'); - ev.error = e; - eventTarget.dispatchEvent(ev); - }).then(this.connect.bind(this)); // No HTTP error? Reconnect. - }; + TextSecureServer.getDevices(textsecure.storage.user.getNumber()). + then(this.connect.bind(this)). + catch(function(e) { + var ev = new Event('textsecure:error'); + ev.error = e; + eventTarget.dispatchEvent(ev); + }); + }.bind(this); this.wsr = new WebSocketResource(this.socket, { handleRequest: this.handleRequest.bind(this), diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 75ccd66b7..86763af60 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -7,28 +7,31 @@ window.textsecure = window.textsecure || {}; function MessageReceiver(url, eventTarget) { + this.url = url; if (eventTarget instanceof EventTarget) { this.target = eventTarget; } else { throw new TypeError('MessageReceiver expected an EventTarget'); } - this.connect(url); + this.connect(); } MessageReceiver.prototype = { constructor: MessageReceiver, - connect: function(url) { + connect: function() { var eventTarget = this.target; // initialize the socket and start listening for messages - this.socket = TextSecureServer.getMessageWebsocket(url); + this.socket = TextSecureServer.getMessageWebsocket(this.url); this.socket.onclose = function(e) { // possible 403. Make a request to confirm - TextSecureServer.getDevices(textsecure.storage.user.getNumber()).catch(function(e) { - var ev = new Event('textsecure:error'); - ev.error = e; - eventTarget.dispatchEvent(ev); - }).then(this.connect.bind(this)); // No HTTP error? Reconnect. - }; + TextSecureServer.getDevices(textsecure.storage.user.getNumber()). + then(this.connect.bind(this)). + catch(function(e) { + var ev = new Event('textsecure:error'); + ev.error = e; + eventTarget.dispatchEvent(ev); + }); + }.bind(this); this.wsr = new WebSocketResource(this.socket, { handleRequest: this.handleRequest.bind(this),