Wallet/js/services/network.js

178 lines
4.6 KiB
JavaScript
Raw Normal View History

'use strict';
angular.module('copay.network')
2014-04-01 18:22:07 -03:00
.factory('Network', function($rootScope, Storage) {
var peer;
2014-04-07 13:26:29 -03:00
var _refreshUx = function() {
var cp = $rootScope.cp;
console.log('*** UPDATING UX'); //TODO
$rootScope.peerId = cp.peerId;
$rootScope.connectedPeers = cp.connectedPeers;
$rootScope.$digest();
};
2014-04-07 13:26:29 -03:00
var _store = function() {
Storage.set($rootScope.walletId, 'peerData', {
peerId: $rootScope.peerId,
connectedPeers: $rootScope.connectedPeers
});
};
// set new inbound connections
var _setNewPeer = function(newPeer) {
var cp = $rootScope.cp;
console.log('#### SENDING PKR 1111 ');
cp.send(newPeer, {
type: 'publicKeyRing',
publicKeyRing: $rootScope.publicKeyRing.toObj(),
});
};
var _handleNetworkChange = function(newPeer) {
var cp = $rootScope.cp;
2014-04-08 00:54:38 -03:00
if (newPeer)
_setNewPeer(newPeer);
_store();
_refreshUx();
};
2014-04-08 00:54:38 -03:00
// TODO -> probably not in network.js
var createWallet = function(walletId) {
console.log('### CREATING WALLET. ID:' + walletId);
2014-04-08 00:54:38 -03:00
//TODO create a wallet and WalletId, not only pkr
var pkr = new copay.PublicKeyRing({
network: config.networkName,
id: walletId,
});
pkr.addCopayer();
console.log('\t### PublicKeyRing Initialized:');
Storage.addWalletId(pkr.id);
Storage.set(pkr.id, 'publicKeyRing', pkr.toObj());
2014-04-08 18:35:43 -03:00
$rootScope.walletId = pkr.id;
$rootScope.publicKeyRing = pkr;
};
2014-04-01 18:22:07 -03:00
var openWallet = function (walletId) {
var ret = false;
var pkr = Storage.get(walletId, 'publicKeyRing');
if (pkr) {
console.log('### WALLET OPENED:', walletId, pkr);
$rootScope.walletId = walletId;
$rootScope.publicKeyRing = new copay.PublicKeyRing.fromObj(pkr);
ret = true;
}
return ret;
};
var closeWallet = function() {
console.log('### CLOSING WALLET');
$rootScope.walletId = null;
$rootScope.publicKeyRing = null;
//TODO
};
var _checkWallet = function(walletId) {
console.log('[network.js.79:_checkWallet:]',walletId); //TODO
if ($rootScope.walletId && $rootScope.walletId !== walletId)
closeWallet();
if ($rootScope.walletId)
return;
if (!openWallet(walletId)) {
createWallet(walletId);
}
};
var _handleData = function(senderId, data, isInbound) {
var cp = $rootScope.cp;
switch(data.type) {
case 'publicKeyRing':
_checkWallet(data.publicKeyRing.id);
var shouldSend = false;
var recipients, pkr = $rootScope.publicKeyRing;
if (pkr.merge(data.publicKeyRing, true) && !data.isBroadcast) {
console.log('### BROADCASTING PKR');
recipients = null;
shouldSend = true;
}
else if (isInbound && !data.isBroadcast) {
// always replying to connecting peer
console.log('### REPLYING PKR TO:', senderId);
recipients = senderId;
shouldSend = true;
}
if (shouldSend) {
console.log('### SENDING PKR TO:', recipients);
cp.send( recipients, {
type: 'publicKeyRing',
publicKeyRing: $rootScope.publicKeyRing.toObj(),
});
}
_refreshUx();
break;
}
};
var _setupHandlers = function () {
var cp = $rootScope.cp;
cp.on('networkChange', _handleNetworkChange);
cp.on('data', _handleData);
};
// public methods
var init = function(cb) {
var cp = $rootScope.cp = new copay.CopayPeer({
apiKey: config.p2pApiKey,
debug: config.p2pDebug,
2014-04-09 11:05:25 -03:00
maxPeers: config.maxPeers, // TODO: This should be on wallet configuration
});
_setupHandlers();
2014-04-08 18:35:43 -03:00
// inicia session
cp.start(function(peerId) {
return cb();
});
};
2014-04-09 11:05:25 -03:00
var disconnect = function() {
if ($rootScope.cp) {
2014-04-09 11:05:25 -03:00
$rootScope.cp.disconnect();
}
2014-04-09 11:05:25 -03:00
Storage.remove('peerData');
$rootScope.isLogged = false;
_refreshUx();
};
2014-04-09 11:05:25 -03:00
var connect = function(peerId, openCallback, failCallBack) {
2014-04-08 18:35:43 -03:00
if ($rootScope.cp) {
2014-04-09 11:05:25 -03:00
$rootScope.cp.connectTo(peerId, openCallback, function () {
disconnect();
failCallBack();
});
2014-04-08 18:35:43 -03:00
}
2014-04-09 11:05:25 -03:00
else
return failCallBack();
2014-04-08 18:35:43 -03:00
};
return {
2014-04-07 13:26:29 -03:00
init: init,
connect: connect,
disconnect: disconnect,
createWallet: createWallet,
openWallet: openWallet,
}
});