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);