diff --git a/index.html b/index.html
index d10b58a89..8b8f6d6f4 100644
--- a/index.html
+++ b/index.html
@@ -17,7 +17,7 @@
+
NOTE: Your wallet is not complete yet.
- {{$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers() }} keys are missing. Ask your copayers to join your session: {{$root.wallet.network.peerId}}
+
+ {{$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers() }} keys are
+
+
+ One key is
+
+
+missing. Ask your copayers to join your session: {{$root.wallet.network.peerId}}
@@ -203,6 +210,7 @@
@@ -226,8 +235,7 @@
-
-
-
- [DEBUG] WalletId: {{$root.wallet.id}}
-
- -
- ${{pub.extendedPublicKeyString()}}
-
-
-
diff --git a/js/config.js b/js/config.js
index c60630981..cf2793f1f 100644
--- a/js/config.js
+++ b/js/config.js
@@ -3,7 +3,12 @@
var config = {
networkName: 'testnet',
network: {
- apiKey: 'lwjd5qra8257b9',
+ key: 'lwjd5qra8257b9',
+ // This is for running local peerJs with params: ./peerjs -p 10009 -k 'sdfjhwefh'
+ // key: 'sdfjhwefh',
+ // host: 'localhost',
+ // port: 10009,
+ // path: '/',
maxPeers: 3,
debug: 3,
},
diff --git a/js/controllers/header.js b/js/controllers/header.js
index 1ac0931b2..d6680e76b 100644
--- a/js/controllers/header.js
+++ b/js/controllers/header.js
@@ -1,7 +1,7 @@
'use strict';
angular.module('copay.header').controller('HeaderController',
- function($scope, $rootScope, $location, walletFactory) {
+ function($scope, $rootScope, $location, walletFactory, controllerUtils) {
$scope.menu = [{
'title': 'Home',
'icon': 'fi-home',
@@ -39,9 +39,7 @@ angular.module('copay.header').controller('HeaderController',
var w = $rootScope.wallet;
if (w) {
w.disconnect();
- delete $rootScope['wallet'];
- $rootScope.totalBalance = 0;
- $location.path('signin');
+ controllerUtils.logout();
}
};
diff --git a/js/controllers/home.js b/js/controllers/home.js
index 8519571ea..bd3753aa1 100644
--- a/js/controllers/home.js
+++ b/js/controllers/home.js
@@ -31,7 +31,6 @@ angular.module('copay.home').controller('HomeController',
$scope.newAddr = function() {
var a = $rootScope.wallet.generateAddress().toString();
$scope.addrs.push(a);
-
_getBalance();
var socket = Socket($scope);
socket.on('connect', controllerUtils.handleTransactionByAddress($scope));
diff --git a/js/controllers/signin.js b/js/controllers/signin.js
index 357cc7acc..260fbb07b 100644
--- a/js/controllers/signin.js
+++ b/js/controllers/signin.js
@@ -26,10 +26,12 @@ angular.module('copay.signin').controller('SigninController',
};
$scope.join = function(cid) {
-console.log('[signin.js.42:join:]'); //TODO
$scope.loading = true;
+ walletFactory.network.on('openError', function() {
+ controllerUtils.onError($scope);
+ $rootScope.$digest();
+ });
walletFactory.connectTo(cid, function(w) {
-console.log('[signin.js.50]'); //TODO
controllerUtils.setupUxHandlers(w);
w.netStart();
});
diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js
index b30de0771..3b251fc78 100644
--- a/js/models/core/Wallet.js
+++ b/js/models/core/Wallet.js
@@ -96,11 +96,12 @@ Wallet.prototype._handleTxProposals = function(senderId, data, isInbound) {
Wallet.prototype._handleData = function(senderId, data, isInbound) {
- if (this.id !== data.walletId)
- throw new Error('wrong message received: Bad wallet ID');
-
+ if (this.id !== data.walletId) {
+ this.emit('badMessage',senderId);
+ this.log('badMessage FROM:', senderId); //TODO
+ return;
+ }
this.log('[Wallet.js.98]' , data.type); //TODO
-
switch(data.type) {
case 'publicKeyRing':
this._handlePublicKeyRing(senderId, data, isInbound);
@@ -108,28 +109,33 @@ Wallet.prototype._handleData = function(senderId, data, isInbound) {
case 'txProposals':
this._handleTxProposals(senderId, data, isInbound);
break;
- case 'abort':
- this.emit('abort');
- break;
}
};
Wallet.prototype._handleNetworkChange = function(newPeer) {
- if (!newPeer) return;
- this.log('#### Setting new PEER:', newPeer);
- this.sendWalletId(newPeer);
- this.sendPublicKeyRing(newPeer);
- this.sendTxProposals(newPeer);
+ if (newPeer) {
+ this.log('#### Setting new PEER:', newPeer);
+ this.sendWalletId(newPeer);
+ this.sendPublicKeyRing(newPeer);
+ this.sendTxProposals(newPeer);
+ }
this.emit('refresh');
};
Wallet.prototype.netStart = function() {
var self = this;
var net = this.network;
+ net.removeAllListeners();
net.on('networkChange', self._handleNetworkChange.bind(self) );
net.on('data', self._handleData.bind(self) );
net.on('open', function() {}); // TODO
- net.on('close', function() {}); // TODO
+ net.on('openError', function() {
+ this.log('[Wallet.js.132:openError:] GOT openError'); //TODO
+ self.emit('openError');
+ });
+ net.on('close', function() {
+ self.emit('close');
+ });
net.start(function(peerId) {
self.emit('created');
});
@@ -185,6 +191,7 @@ Wallet.prototype.sendPublicKeyRing = function(recipients) {
this.emit('publicKeyRingUpdated', this.publicKeyRing);
};
+
Wallet.prototype.generateAddress = function() {
var addr = this.publicKeyRing.generateAddress();
this.store();
diff --git a/js/models/network/WebRTC.js b/js/models/network/WebRTC.js
index e61fbf2bf..d1a16ae03 100644
--- a/js/models/network/WebRTC.js
+++ b/js/models/network/WebRTC.js
@@ -16,11 +16,18 @@ var EventEmitter= imports.EventEmitter || require('events').EventEmitter;
*/
function Network(opts) {
+ var self = this;
opts = opts || {};
this.peerId = opts.peerId;
this.apiKey = opts.apiKey || 'lwjd5qra8257b9';
this.debug = opts.debug || 3;
this.maxPeers = opts.maxPeers || 5;
+ this.opts = { key: opts.key };
+
+ // For using your own peerJs server
+ ['port', 'host', 'path', 'debug'].forEach(function(k) {
+ if (opts[k]) self.opts[k]=opts[k];
+ });
this.connectedPeers = [];
}
@@ -128,6 +135,13 @@ Network.prototype._addPeer = function(peerId, isInbound) {
}
};
+Network.prototype._checkAnyPeer = function() {
+ if (!this.connectedPeers.length) {
+ console.log('EMIT openError: no more peers, not even you!');
+ this.emit('openError');
+ }
+}
+
Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) {
var self=this;
@@ -150,14 +164,14 @@ Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) {
dataConn.on('error', function(e) {
console.log('### DATA ERROR',e ); //TODO
+ self.emit('dataError');
});
dataConn.on('close', function() {
if (self.closing) return;
- self.closing=1;
console.log('### CLOSE RECV FROM:', dataConn.peer);
self._onClose(dataConn.peer);
- this.emit('close');
+ self._checkAnyPeer();
});
};
@@ -182,7 +196,7 @@ Network.prototype._setupPeerHandlers = function(openCallback) {
self.peer.disconnect();
self.peer.destroy();
self.peer = null;
- this.emit('abort');
+ self._checkAnyPeer();
});
p.on('connection', function(dataConn) {
@@ -205,11 +219,7 @@ Network.prototype.start = function(openCallback) {
// Start PeerJS Peer
if (this.peer) return openCallback(); // This is for connectTo-> peer is started before
- this.peer = new Peer(this.peerId, {
- key: this.apiKey, // TODO: we need our own PeerServer KEY (http://peerjs.com/peerserver)
- debug: this.debug,
- });
-
+ this.peer = new Peer(this.peerId, this.opts);
this._setupPeerHandlers(openCallback);
};
@@ -234,6 +244,7 @@ Network.prototype._sendToOne = function(peerId, data, cb) {
Network.prototype.send = function(peerIds, data, cb) {
var self=this;
+console.log('[WebRTC.js.242] SENDING ', data.type); //TODO
if (!peerIds) {
peerIds = this.connectedPeers;
data.isBroadcast = 1;
@@ -243,6 +254,7 @@ Network.prototype.send = function(peerIds, data, cb) {
var l = peerIds.length;
var i = 0;
peerIds.forEach(function(peerId) {
+console.log('[WebRTC.js.258:peerId:]',peerId); //TODO
self._sendToOne(peerId, data, function () {
if (++i === l && typeof cb === 'function') cb();
});
@@ -270,7 +282,6 @@ Network.prototype.connectTo = function(peerId) {
Network.prototype.disconnect = function(cb) {
var self = this;
self.closing = 1;
-
this.send(null, { type: 'disconnect' }, function() {
self.connectedPeers = [];
self.peerId = null;
diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js
index 7167381d0..1c5cde907 100644
--- a/js/services/controllerUtils.js
+++ b/js/services/controllerUtils.js
@@ -2,7 +2,32 @@
angular.module('copay.controllerUtils').factory('controllerUtils', function ($rootScope, $location, Socket) {
var root = {};
+
+ root.logout = function(scope) {
+ delete $rootScope['wallet'];
+ $rootScope.totalBalance = 0;
+ $location.path('signin');
+ };
+
+ root.onError = function(scope) {
+ if (scope) scope.loading = false;
+ $rootScope.flashMessage = {type:'error', message: 'Could not connect to peer'};
+ root.logout();
+ }
+
+
+ root.onErrorDigest = function(scope) {
+ root.onError(scope);
+ $rootScope.$digest();
+ }
+
+
root.setupUxHandlers = function(w) {
+
+ w.on('badMessage', function(peerId) {
+ $rootScope.flashMessage = {type:'error', message: 'Received wrong message from peer id:' + peerId};
+ });
+
w.on('created', function() {
$location.path('peer');
$rootScope.wallet = w;
@@ -14,14 +39,11 @@ angular.module('copay.controllerUtils').factory('controllerUtils', function ($ro
});
});
w.on('refresh', function() {
- console.log('[controllerUtils.js] RECEIVED REFRESH'); //TODO
- });
-
- w.on('openError', function(){
- $scope.loading = false;
- $rootScope.flashMessage = {type:'error', message: 'Wallet not found'};
- $location.path('signin');
+ console.log('[controllerUtils.js] Refreshing'); //TODO
+ $rootScope.$digest();
});
+ w.on('openError', root.onErrorDigest);
+ w.on('close', root.onErrorDigest);
};
root.handleTransactionByAddress = function(scope) {