diff --git a/index.html b/index.html index d10b58a89..8b8f6d6f4 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,7 @@
-
Company Funds
+
Wallet ID:{{$root.wallet.id}}

{{totalBalance}} BTC

0 BTC

@@ -48,15 +48,22 @@
{{$root.flashMessage.type}}: {{$root.flashMessage.message}} - Dismiss + Dismiss
-
+

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}} -

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