From 9b5e15519242e88ed0b9682d14463104c02d8651 Mon Sep 17 00:00:00 2001 From: Yemel Jardi Date: Fri, 6 Jun 2014 12:30:50 -0300 Subject: [PATCH] Add retry connection to peerjs server on login --- js/controllers/import.js | 4 ++++ js/controllers/signin.js | 6 +++++- js/models/core/Wallet.js | 3 +++ js/models/network/WebRTC.js | 30 ++++++++++++++++++++++++++---- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/js/controllers/import.js b/js/controllers/import.js index 13a891113..eb4c9b8f6 100644 --- a/js/controllers/import.js +++ b/js/controllers/import.js @@ -25,6 +25,10 @@ angular.module('copayApp.controllers').controller('ImportController', var message = "Looks like you are already connected to this wallet, please logout from it and try importing it again."; $rootScope.$flashMessage = { message: message, type: 'error'}; }); + $rootScope.wallet.on('serverError', function() { + $rootScope.$flashMessage = { message: 'The PeerJS server is not responding, please try again', type: 'error'}; + controllerUtils.onErrorDigest(); + }); }); }; diff --git a/js/controllers/signin.js b/js/controllers/signin.js index daadea046..758e1c9b0 100644 --- a/js/controllers/signin.js +++ b/js/controllers/signin.js @@ -61,7 +61,7 @@ angular.module('copayApp.controllers').controller('SigninController', $rootScope.$flashMessage = { message: 'Bad secret secret string', type: 'error'}; else $rootScope.$flashMessage = { message: 'Unknown error', type: 'error'}; - controllerUtils.onErrorDigest(); + controllerUtils.onErrorDigest(); } else { controllerUtils.startNetwork(w); installStartupHandlers(w); @@ -77,6 +77,10 @@ angular.module('copayApp.controllers').controller('SigninController', wallet.on('ready', function() { $scope.loading = false; }); + wallet.on('serverError', function() { + $rootScope.$flashMessage = { message: 'The PeerJS server is not responding, please try again', type: 'error'}; + controllerUtils.onErrorDigest($scope); + }); } }); diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 82448ef07..83eccf899 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -242,6 +242,9 @@ Wallet.prototype.netStart = function() { net.on('close', function() { self.emit('close'); }); + net.on('serverError', function() { + self.emit('serverError'); + }); var myId = self.getMyCopayerId(); var startOpts = { diff --git a/js/models/network/WebRTC.js b/js/models/network/WebRTC.js index 8c252eeab..2b422ada0 100644 --- a/js/models/network/WebRTC.js +++ b/js/models/network/WebRTC.js @@ -52,9 +52,11 @@ Network.prototype.cleanUp = function() { if (this.peer) { this.peer.disconnect(); this.peer.destroy(); + this.peer.removeAllListeners(); this.peer = null; } this.closing = 0; + this.tries = 0; }; Network.parent=EventEmitter; @@ -309,11 +311,31 @@ Network.prototype.start = function(opts, openCallback) { if (!this.copayerId) this.setCopayerId(opts.copayerId); - this.peer = new Peer(this.peerId, this.opts); - this.started = true; - this._setupPeerHandlers(openCallback); -}; + var self = this; + var setupPeer = function () { + if (self.connectedPeers.length > 0) return; // Already connected! + if (self.peer) { + self.peer.destroy(); + self.peer.removeAllListeners(); + } + if (self.tries < 2) { + self.tries++; + self.peer = new Peer(self.peerId, self.opts); + self.started = true; + self._setupPeerHandlers(openCallback); + + setTimeout(setupPeer, 3000); // Schedule retry + return; + } + + self.emit('serverError'); + self.cleanUp(); + } + + this.tries = 0; + setupPeer(); +}; Network.prototype.getOnlinePeerIDs = function() { return this.connectedPeers;