From d6ceadb1bef311e1e8681866a6444fd52dd7ab10 Mon Sep 17 00:00:00 2001 From: David Cormier Date: Sun, 27 Oct 2013 10:49:54 -0400 Subject: [PATCH] Fail all callbacks disconnection / error Callback promises are resolved when their answer is received If the websocket disconnects or fails before receives its answer, it's promise is rejected. --- js/websockets.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/js/websockets.js b/js/websockets.js index 5bb18fb..286fc8f 100644 --- a/js/websockets.js +++ b/js/websockets.js @@ -304,9 +304,22 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers', }); } + /* + * Fails every currently subscribed callback for the + * given reason + * @param reason reason for failure + */ + failCallbacks = function(reason) { + for(i in callbacks) { + callbacks[i].cb.reject(reason); + } + + } + websocket.onclose = function (evt) { $log.info("Disconnected from relay"); $rootScope.connected = false; + failCallbacks('disconnection'); if ($rootScope.passwordError == true) { $log.info("wrong password"); } @@ -332,6 +345,7 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers', $rootScope.passwordError = false; if (evt.type == "error" && websocket.readyState != 1) { + failCallbacks('error'); $rootScope.errorMessage = true; } $log.error("Relay error " + evt.data);