options for running with local peerJs server. Ux fixes

This commit is contained in:
Matias Alejo Garcia 2014-04-17 16:27:15 -03:00
commit 1e64031ec3
7 changed files with 85 additions and 31 deletions

View file

@ -52,11 +52,18 @@
</div> </div>
<div ng-if='$root.wallet && !$root.wallet.publicKeyRing.isComplete() && !loading' class="panel callout radius" > <div ng-if='$root.wallet && !$root.wallet.publicKeyRing.isComplete() && !loading' class="panel radius" >
<p class="panel panel-sign"> <i class="fi-alert size-40"></i> <p class="panel panel-sign"> <i class="fi-alert size-40"></i>
NOTE: Your wallet is not complete yet. 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: <b>{{$root.wallet.network.peerId}}</b> <span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()>1">
{{$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers() }} keys are
</span>
<span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()==1">
One key is
</span>
missing. Ask your copayers to join your session: <b>{{$root.wallet.network.peerId}}</b>
</p> </p>
</div> </div>

View file

@ -3,7 +3,12 @@
var config = { var config = {
networkName: 'testnet', networkName: 'testnet',
network: { network: {
apiKey: 'lwjd5qra8257b9', // apiKey: 'lwjd5qra8257b9',
// This is for running local peerJs with params: ./peerjs -p 10009 -k 'sdfjhwefh'
apiKey: 'sdfjhwefh',
host: 'localhost',
port: 10009,
path: '/',
maxPeers: 3, maxPeers: 3,
debug: 3, debug: 3,
}, },

View file

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copay.header').controller('HeaderController', angular.module('copay.header').controller('HeaderController',
function($scope, $rootScope, $location, walletFactory) { function($scope, $rootScope, $location, walletFactory, controllerUtils) {
$scope.menu = [{ $scope.menu = [{
'title': 'Home', 'title': 'Home',
'icon': 'fi-home', 'icon': 'fi-home',
@ -39,9 +39,7 @@ angular.module('copay.header').controller('HeaderController',
var w = $rootScope.wallet; var w = $rootScope.wallet;
if (w) { if (w) {
w.disconnect(); w.disconnect();
delete $rootScope['wallet']; controllerUtils.logout();
$rootScope.totalBalance = 0;
$location.path('signin');
} }
}; };

View file

@ -26,10 +26,12 @@ angular.module('copay.signin').controller('SigninController',
}; };
$scope.join = function(cid) { $scope.join = function(cid) {
console.log('[signin.js.42:join:]'); //TODO
$scope.loading = true; $scope.loading = true;
walletFactory.network.on('openError', function() {
controllerUtils.onError($scope);
$rootScope.$digest();
});
walletFactory.connectTo(cid, function(w) { walletFactory.connectTo(cid, function(w) {
console.log('[signin.js.50]'); //TODO
controllerUtils.setupUxHandlers(w); controllerUtils.setupUxHandlers(w);
w.netStart(); w.netStart();
}); });

View file

@ -96,8 +96,11 @@ Wallet.prototype._handleTxProposals = function(senderId, data, isInbound) {
Wallet.prototype._handleData = function(senderId, data, isInbound) { Wallet.prototype._handleData = function(senderId, data, isInbound) {
if (this.id !== data.walletId) if (this.id !== data.walletId) {
throw new Error('wrong message received: Bad wallet ID'); this.emit('badMessage',senderId);
this.log('badMessage FROM:', senderId); //TODO
return;
}
this.log('[Wallet.js.98]' , data.type); //TODO this.log('[Wallet.js.98]' , data.type); //TODO
@ -108,18 +111,16 @@ Wallet.prototype._handleData = function(senderId, data, isInbound) {
case 'txProposals': case 'txProposals':
this._handleTxProposals(senderId, data, isInbound); this._handleTxProposals(senderId, data, isInbound);
break; break;
case 'abort':
this.emit('abort');
break;
} }
}; };
Wallet.prototype._handleNetworkChange = function(newPeer) { Wallet.prototype._handleNetworkChange = function(newPeer) {
if (!newPeer) return; if (newPeer) {
this.log('#### Setting new PEER:', newPeer); this.log('#### Setting new PEER:', newPeer);
this.sendWalletId(newPeer); this.sendWalletId(newPeer);
this.sendPublicKeyRing(newPeer); this.sendPublicKeyRing(newPeer);
this.sendTxProposals(newPeer); this.sendTxProposals(newPeer);
}
this.emit('refresh'); this.emit('refresh');
}; };
@ -129,7 +130,13 @@ Wallet.prototype.netStart = function() {
net.on('networkChange', self._handleNetworkChange.bind(self) ); net.on('networkChange', self._handleNetworkChange.bind(self) );
net.on('data', self._handleData.bind(self) ); net.on('data', self._handleData.bind(self) );
net.on('open', function() {}); // TODO net.on('open', function() {}); // TODO
net.on('close', function() {}); // TODO net.on('openError', function() {
console.log('[Wallet.js.132:openError:] GOT openError'); //TODO
self.emit('openError');
});
net.on('close', function() {
self.emit('close');
});
net.start(function(peerId) { net.start(function(peerId) {
self.emit('created'); self.emit('created');
}); });
@ -185,6 +192,7 @@ Wallet.prototype.sendPublicKeyRing = function(recipients) {
this.emit('publicKeyRingUpdated', this.publicKeyRing); this.emit('publicKeyRingUpdated', this.publicKeyRing);
}; };
Wallet.prototype.generateAddress = function() { Wallet.prototype.generateAddress = function() {
var addr = this.publicKeyRing.generateAddress(); var addr = this.publicKeyRing.generateAddress();
this.store(); this.store();

View file

@ -21,6 +21,12 @@ function Network(opts) {
this.apiKey = opts.apiKey || 'lwjd5qra8257b9'; this.apiKey = opts.apiKey || 'lwjd5qra8257b9';
this.debug = opts.debug || 3; this.debug = opts.debug || 3;
this.maxPeers = opts.maxPeers || 5; this.maxPeers = opts.maxPeers || 5;
// For using your own peerJs server
this.port = opts.port;
this.host = opts.host;
this.path = opts.path;
this.connectedPeers = []; this.connectedPeers = [];
} }
@ -150,14 +156,17 @@ Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) {
dataConn.on('error', function(e) { dataConn.on('error', function(e) {
console.log('### DATA ERROR',e ); //TODO console.log('### DATA ERROR',e ); //TODO
self.emit('openError');
}); });
dataConn.on('close', function() { dataConn.on('close', function() {
if (self.closing) return; if (self.closing) return;
self.closing=1;
console.log('### CLOSE RECV FROM:', dataConn.peer); console.log('### CLOSE RECV FROM:', dataConn.peer);
self._onClose(dataConn.peer); self._onClose(dataConn.peer);
this.emit('close'); if (! isInbound) {
console.log('[WebRTC.js.163] EMIT openError'); //TODO
self.emit('openError');
}
}); });
}; };
@ -182,7 +191,7 @@ Network.prototype._setupPeerHandlers = function(openCallback) {
self.peer.disconnect(); self.peer.disconnect();
self.peer.destroy(); self.peer.destroy();
self.peer = null; self.peer = null;
this.emit('abort'); self.emit('openError');
}); });
p.on('connection', function(dataConn) { p.on('connection', function(dataConn) {
@ -207,6 +216,9 @@ Network.prototype.start = function(openCallback) {
this.peer = new Peer(this.peerId, { this.peer = new Peer(this.peerId, {
key: this.apiKey, // TODO: we need our own PeerServer KEY (http://peerjs.com/peerserver) key: this.apiKey, // TODO: we need our own PeerServer KEY (http://peerjs.com/peerserver)
host: this.host,
port: this.port,
path: this.path,
debug: this.debug, debug: this.debug,
}); });
@ -234,6 +246,7 @@ Network.prototype._sendToOne = function(peerId, data, cb) {
Network.prototype.send = function(peerIds, data, cb) { Network.prototype.send = function(peerIds, data, cb) {
var self=this; var self=this;
console.log('[WebRTC.js.242] SENDING ', data.type); //TODO
if (!peerIds) { if (!peerIds) {
peerIds = this.connectedPeers; peerIds = this.connectedPeers;
data.isBroadcast = 1; data.isBroadcast = 1;
@ -270,7 +283,6 @@ Network.prototype.connectTo = function(peerId) {
Network.prototype.disconnect = function(cb) { Network.prototype.disconnect = function(cb) {
var self = this; var self = this;
self.closing = 1; self.closing = 1;
this.send(null, { type: 'disconnect' }, function() { this.send(null, { type: 'disconnect' }, function() {
self.connectedPeers = []; self.connectedPeers = [];
self.peerId = null; self.peerId = null;

View file

@ -2,7 +2,32 @@
angular.module('copay.controllerUtils').factory('controllerUtils', function ($rootScope, $location, Socket) { angular.module('copay.controllerUtils').factory('controllerUtils', function ($rootScope, $location, Socket) {
var root = {}; 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) { 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() { w.on('created', function() {
$location.path('peer'); $location.path('peer');
$rootScope.wallet = w; $rootScope.wallet = w;
@ -14,14 +39,11 @@ angular.module('copay.controllerUtils').factory('controllerUtils', function ($ro
}); });
}); });
w.on('refresh', function() { w.on('refresh', function() {
console.log('[controllerUtils.js] RECEIVED REFRESH'); //TODO console.log('[controllerUtils.js] Refreshing'); //TODO
}); $rootScope.$digest();
w.on('openError', function(){
$scope.loading = false;
$rootScope.flashMessage = {type:'error', message: 'Wallet not found'};
$location.path('signin');
}); });
w.on('openError', root.onErrorDigest);
w.on('close', root.onErrorDigest);
}; };
root.handleTransactionByAddress = function(scope) { root.handleTransactionByAddress = function(scope) {