diff --git a/config.js b/config.js index 5a6960a6c..d6adfb2df 100644 --- a/config.js +++ b/config.js @@ -43,8 +43,32 @@ var defaultConfig = { 'iceServers': [ // Pass in STUN and TURN servers for maximum network compatibility { - url: 'stun:stun01.sipphone.com' - }, + url: 'stun:stun.l.google.com:19302' + }, { + url: 'stun:stun1.l.google.com:19302' + }, { + url: 'stun:stun2.l.google.com:19302' + }, { + url: 'stun:stun3.l.google.com:19302' + }, { + url: 'stun:stun4.l.google.com:19302' + }, { + url: 'stun:stunserver.org' + } + // Options fot TURN servers with p2p communications are not possible. + // { + // url: 'turn:numb.viagenie.ca', + // credential: 'muazkh', + // username: 'webrtc@live.com' + // }, { + // url: 'turn:192.158.29.39:3478?transport=udp', + // credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', + // username: '28224511:1379330808' + // }, { + // url: 'turn:192.158.29.39:3478?transport=tcp', + // credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', + // username: '28224511:1379330808' + // } ] } }, @@ -55,7 +79,7 @@ var defaultConfig = { totalCopayers: 3, spendUnconfirmed: 1, verbose: 1, - reconnectDelay: 5000, + reconnectDelay: 500, }, // blockchain service API config diff --git a/index.html b/index.html index 4b8a52a71..7abd51290 100644 --- a/index.html +++ b/index.html @@ -194,10 +194,6 @@ Authenticating and looking for peers... -
- Oops, we had an error! Looks like you are already connected to this wallet, - please close all other Copay Wallets and Try again. -
diff --git a/js/controllers/signin.js b/js/controllers/signin.js index 758e1c9b0..b2c9a9381 100644 --- a/js/controllers/signin.js +++ b/js/controllers/signin.js @@ -7,7 +7,7 @@ angular.module('copayApp.controllers').controller('SigninController', return v1 > v2 ? 1 : ( v1 < v2 ) ? -1 : 0; }; $rootScope.videoInfo = {}; - $scope.loading = $scope.failure = false; + $scope.loading = false; $scope.wallets = walletFactory.getWallets().sort(cmp); $scope.selectedWalletId = $scope.wallets.length ? $scope.wallets[0].id : null; $scope.openPassword = ''; @@ -29,7 +29,7 @@ angular.module('copayApp.controllers').controller('SigninController', errMsg = e.message; }; if (!w) { - $scope.loading = $scope.failure = false; + $scope.loading = false; $rootScope.$flashMessage = { message: errMsg || 'Wrong password', type: 'error'}; $rootScope.$digest(); return; @@ -71,16 +71,17 @@ angular.module('copayApp.controllers').controller('SigninController', }; function installStartupHandlers(wallet) { - wallet.on('connectionError', function(err) { - $scope.failure = true; + wallet.on('serverError', function(msg) { + $rootScope.$flashMessage = { + message: 'There was an error connecting to the PeerJS server.' + +(msg||'Check you settings and Internet connection.'), + type: 'error', + }; + controllerUtils.onErrorDigest($scope); }); 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 cf62d2498..dcef5dc0b 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -161,6 +161,7 @@ Wallet.prototype._handleData = function(senderId, data, isInbound) { Wallet.prototype._handleConnect = function(newCopayerId) { if (newCopayerId) { this.log('#### Setting new COPAYER:', newCopayerId); + this.currentDelay = this.reconnectDelay; this.sendWalletId(newCopayerId); } var peerID = this.network.peerFromCopayer(newCopayerId) @@ -232,18 +233,11 @@ Wallet.prototype.netStart = function() { net.on('connect', self._handleConnect.bind(self)); net.on('disconnect', self._handleDisconnect.bind(self)); net.on('data', self._handleData.bind(self)); - net.on('openError', function() { - self.log('[Wallet.js.132:openError:] GOT openError'); //TODO - self.emit('openError'); - }); - net.on('error', function() { - self.emit('connectionError'); - }); net.on('close', function() { self.emit('close'); }); - net.on('serverError', function() { - self.emit('serverError'); + net.on('serverError', function(msg) { + self.emit('serverError', msg); }); var myId = self.getMyCopayerId(); @@ -271,9 +265,12 @@ Wallet.prototype.netStart = function() { Wallet.prototype.scheduleConnect = function() { var self = this; + self.currentDelay = self.currentDelay || self.reconnectDelay; + if (self.network.isOnline()) { self.connectToAll(); - setTimeout(self.scheduleConnect.bind(self), self.reconnectDelay); + self.currentDelay *=2; + setTimeout(self.scheduleConnect.bind(self), self.currentDelay); } } diff --git a/js/models/network/WebRTC.js b/js/models/network/WebRTC.js index 2b422ada0..809dc9ac0 100644 --- a/js/models/network/WebRTC.js +++ b/js/models/network/WebRTC.js @@ -23,6 +23,7 @@ function Network(opts) { this.apiKey = opts.apiKey || 'lwjd5qra8257b9'; this.debug = opts.debug || 3; this.maxPeers = opts.maxPeers || 10; + this.reconnectAttempts = opts.reconnectAttempts || 3; this.sjclParams = opts.sjclParams || { salt: 'f28bfb49ef70573c', iter:500, @@ -49,6 +50,7 @@ Network.prototype.cleanUp = function() { this.isInboundPeerAuth=[]; this.copayerForPeer={}; this.connections={}; + this.criticalErr=''; if (this.peer) { this.peer.disconnect(); this.peer.destroy(); @@ -187,11 +189,7 @@ Network.prototype._onData = function(encStr, isInbound, peerId) { } }; -Network.prototype._checkAnyPeer = function() { - if (!this.connectedPeers.length) { - this.cleanUp(); - this.emit('openError'); - } +Network.prototype._checkAnyPeer = function(msg) { if (this.connectedPeers.length === 1) { this.emit('onlyYou'); } @@ -246,10 +244,10 @@ Network.prototype._setupPeerHandlers = function(openCallback) { }); p.on('error', function(err) { - if (!err.message.match(/Could\snot\sconnect\sto peer/)) { - self.emit('error', err); + console.log('RECV ERROR: ', err); //TODO + if (!err.message.match(/Could\snot\sconnect\sto peer/) ) { + self.criticalError=err.message; } - self._checkAnyPeer(); }); p.on('connection', function(dataConn) { @@ -319,17 +317,18 @@ Network.prototype.start = function(opts, openCallback) { self.peer.removeAllListeners(); } - if (self.tries < 2) { + if (!self.criticalError && self.tries < self.reconnectAttempts) { 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'); + if (self.criticalError && self.criticalError.match(/taken/)) { + self.criticalError=' Looks like you are already connected to this wallet please close all other Copay Wallets ' + } + self.emit('serverError', self.criticalError); self.cleanUp(); } diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js index 516fdfee1..5647c44bd 100644 --- a/js/services/controllerUtils.js +++ b/js/services/controllerUtils.js @@ -79,8 +79,9 @@ angular.module('copayApp.services') } }); }); - w.on('openError', root.onErrorDigest); - w.on('connectionError', root.onErrorDigest); + w.on('connectionError', function(msg) { + root.onErrorDigest(msg); + }); w.on('connect', function(peerID) { if (peerID) { video.callPeer(peerID, handlePeerVideo);