mirror of https://github.com/BTCPrivate/copay.git
commit
581be08a9e
|
@ -8,6 +8,7 @@ angular.module('copay.transactions').controller('TransactionsController',
|
||||||
$scope.oneAtATime = true;
|
$scope.oneAtATime = true;
|
||||||
|
|
||||||
var _updateTxs = function() {
|
var _updateTxs = function() {
|
||||||
|
console.log('[transactions.js.10:_updateTxs:]'); //TODO
|
||||||
var w =$rootScope.wallet;
|
var w =$rootScope.wallet;
|
||||||
var inT = w.getTxProposals();
|
var inT = w.getTxProposals();
|
||||||
var txs = [];
|
var txs = [];
|
||||||
|
@ -35,11 +36,14 @@ angular.module('copay.transactions').controller('TransactionsController',
|
||||||
one.missingSignatures = tx.countInputMissingSignatures(0);
|
one.missingSignatures = tx.countInputMissingSignatures(0);
|
||||||
one.signedByUs = i.signedByUs;
|
one.signedByUs = i.signedByUs;
|
||||||
one.ntxid = i.ntxid;
|
one.ntxid = i.ntxid;
|
||||||
one.creator = i.txp.creator,
|
one.creator = i.txp.creator;
|
||||||
one.createdTs = i.txp.createdTs;
|
one.createdTs = i.txp.createdTs;
|
||||||
|
one.sentTs = i.txp.sentTs;
|
||||||
txs.push(one);
|
txs.push(one);
|
||||||
});
|
});
|
||||||
$scope.txs = txs;
|
$scope.txs = txs;
|
||||||
|
console.log('[transactions.js.55] SET HANDL+'); //TODO
|
||||||
|
w.once('txProposalsUpdated',_updateTxs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,7 +53,7 @@ angular.module('copay.transactions').controller('TransactionsController',
|
||||||
else {
|
else {
|
||||||
_updateTxs();
|
_updateTxs();
|
||||||
var w = $rootScope.wallet;
|
var w = $rootScope.wallet;
|
||||||
w.on('refresh',_updateTxs);
|
|
||||||
var socket = Socket($scope);
|
var socket = Socket($scope);
|
||||||
socket.on('connect', controllerUtils.handleTransactionByAddress($scope));
|
socket.on('connect', controllerUtils.handleTransactionByAddress($scope));
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,10 @@ Insight.prototype.sendRawTransaction = function(rawtx, cb) {
|
||||||
headers: { 'content-type' : 'application/x-www-form-urlencoded' }
|
headers: { 'content-type' : 'application/x-www-form-urlencoded' }
|
||||||
};
|
};
|
||||||
this._request(options, function(err,res) {
|
this._request(options, function(err,res) {
|
||||||
|
console.log('[Insight.js.73:err:]',err); //TODO
|
||||||
if (err) return cb();
|
if (err) return cb();
|
||||||
|
|
||||||
|
console.log('[Insight.js.74]', res); //TODO
|
||||||
return cb(res.txid);
|
return cb(res.txid);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -95,13 +98,18 @@ Insight.prototype._request = function(options, callback) {
|
||||||
request.open(options.method, url, true);
|
request.open(options.method, url, true);
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = function() {
|
||||||
if (request.readyState === 4) {
|
if (request.readyState === 4) {
|
||||||
|
console.log('[Insight.js.102]', request); //TODO
|
||||||
if (request.status === 200) {
|
if (request.status === 200) {
|
||||||
try {
|
try {
|
||||||
return callback(null, JSON.parse(request.responseText));
|
return callback(null, JSON.parse(request.responseText));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
||||||
|
console.log('[Insight.js.106]'); //TODO
|
||||||
return callback({message: 'Wrong response from insight'});
|
return callback({message: 'Wrong response from insight'});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
console.log('[Insight.js.111]'); //TODO
|
||||||
return callback({message: 'Error ' + request.status});
|
return callback({message: 'Error ' + request.status});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ function TxProposal(opts) {
|
||||||
this.seenBy = opts.seenBy || {};
|
this.seenBy = opts.seenBy || {};
|
||||||
this.signedBy = opts.signedBy || {};
|
this.signedBy = opts.signedBy || {};
|
||||||
this.builder = opts.builder;
|
this.builder = opts.builder;
|
||||||
|
this.sentTs = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
TxProposal.prototype.toObj = function() {
|
TxProposal.prototype.toObj = function() {
|
||||||
|
@ -35,6 +36,14 @@ TxProposal.fromObj = function(o) {
|
||||||
return t;
|
return t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TxProposal.setSent = function() {
|
||||||
|
this.sentTs = Date.now();;
|
||||||
|
};
|
||||||
|
|
||||||
|
TxProposal.getSentTs = function() {
|
||||||
|
return this.sentTs;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = require('soop')(TxProposal);
|
module.exports = require('soop')(TxProposal);
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,6 +63,7 @@ TxProposals.fromObj = function(o) {
|
||||||
o.txps.forEach(function(o2) {
|
o.txps.forEach(function(o2) {
|
||||||
var t = TxProposal.fromObj(o2);
|
var t = TxProposal.fromObj(o2);
|
||||||
var id = t.builder.build().getNormalizedHash().toString('hex');
|
var id = t.builder.build().getNormalizedHash().toString('hex');
|
||||||
|
console.log('[TxProposals.js.65:id:]',id, o2); //TODO
|
||||||
ret.txps[id] = t;
|
ret.txps[id] = t;
|
||||||
});
|
});
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -64,6 +74,7 @@ TxProposals.prototype.toObj = function() {
|
||||||
var ret = [];
|
var ret = [];
|
||||||
for(var id in this.txps){
|
for(var id in this.txps){
|
||||||
var t = this.txps[id];
|
var t = this.txps[id];
|
||||||
|
if (!t.sent)
|
||||||
ret.push(t.toObj());
|
ret.push(t.toObj());
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
@ -110,43 +121,66 @@ TxProposals.prototype._startMerge = function(myTxps, theirTxps) {
|
||||||
TxProposals.prototype._mergeMetadata = function(myTxps, theirTxps, mergeInfo) {
|
TxProposals.prototype._mergeMetadata = function(myTxps, theirTxps, mergeInfo) {
|
||||||
|
|
||||||
var toMerge = mergeInfo.toMerge;
|
var toMerge = mergeInfo.toMerge;
|
||||||
|
var hasChanged =0;
|
||||||
|
|
||||||
Object.keys(toMerge).forEach(function(hash) {
|
Object.keys(toMerge).forEach(function(hash) {
|
||||||
var v0 = myTxps[hash];
|
var v0 = myTxps[hash];
|
||||||
var v1 = toMerge[hash];
|
var v1 = toMerge[hash];
|
||||||
|
console.log('[TxProposals.js.127:v0:]',v0, v1); //TODO
|
||||||
|
|
||||||
Object.keys(v1.seenBy).forEach(function(k) {
|
Object.keys(v1.seenBy).forEach(function(k) {
|
||||||
|
if (!v0.seenBy[k] || v0.seenBy[k] !== v1.seenBy[k]) {
|
||||||
v0.seenBy[k] = v1.seenBy[k];
|
v0.seenBy[k] = v1.seenBy[k];
|
||||||
|
hasChanged++;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.keys(v1.signedBy).forEach(function(k) {
|
Object.keys(v1.signedBy).forEach(function(k) {
|
||||||
|
if (!v0.signedBy[k]) {
|
||||||
v0.signedBy[k] = v1.signedBy[k];
|
v0.signedBy[k] = v1.signedBy[k];
|
||||||
|
hasChanged++;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!v0.sentTs && v1.sentTs) {
|
||||||
|
v0.sentTs = v1.sentTs;
|
||||||
|
hasChanged++;
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
console.log('[TxProposals.js.131:hasChanged:]',hasChanged); //TODO
|
||||||
|
return hasChanged;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
TxProposals.prototype._mergeBuilder = function(myTxps, theirTxps, mergeInfo) {
|
TxProposals.prototype._mergeBuilder = function(myTxps, theirTxps, mergeInfo) {
|
||||||
var toMerge = mergeInfo.toMerge;
|
var toMerge = mergeInfo.toMerge;
|
||||||
|
var hasChanged=0;
|
||||||
|
|
||||||
for(var hash in toMerge){
|
for(var hash in toMerge){
|
||||||
var v0 = myTxps[hash].builder;
|
var v0 = myTxps[hash].builder;
|
||||||
var v1 = toMerge[hash].builder;
|
var v1 = toMerge[hash].builder;
|
||||||
|
|
||||||
|
// TODO: enhance this
|
||||||
|
var before = JSON.stringify(v0.toObj());
|
||||||
v0.merge(v1);
|
v0.merge(v1);
|
||||||
};
|
var after = JSON.stringify(v0.toObj());
|
||||||
|
if (after !== before) hasChanged ++;
|
||||||
|
}
|
||||||
|
console.log('[TxProposals.js.149:hasChanged:]',hasChanged); //TODO
|
||||||
};
|
};
|
||||||
|
|
||||||
TxProposals.prototype.add = function(data) {
|
TxProposals.prototype.add = function(data) {
|
||||||
var id = data.builder.build().getNormalizedHash().toString('hex');
|
var id = data.builder.build().getNormalizedHash().toString('hex');
|
||||||
|
console.log('[TxProposals.js.175:data: ADD]',data); //TODO
|
||||||
this.txps[id] = new TxProposal(data);
|
this.txps[id] = new TxProposal(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
TxProposals.prototype.remove = function(ntxid) {
|
TxProposals.prototype.setSent = function(ntxid) {
|
||||||
|
//sent TxProposals are local an not broadcasted.
|
||||||
console.log('[TxProposals.js.147] DELETING:', ntxid); //TODO
|
console.log('[TxProposals.js.147] SET SENT:', ntxid); //TODO
|
||||||
delete this.txps[ntxid];
|
this.txps[ntxid].setSent();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -155,18 +189,21 @@ TxProposals.prototype.merge = function(t) {
|
||||||
throw new Error('network mismatch in:', t);
|
throw new Error('network mismatch in:', t);
|
||||||
|
|
||||||
var res = [];
|
var res = [];
|
||||||
|
var hasChanged = 0;
|
||||||
|
|
||||||
var myTxps = this.txps;
|
var myTxps = this.txps;
|
||||||
var theirTxps = t.txps;
|
var theirTxps = t.txps;
|
||||||
|
|
||||||
var mergeInfo = this._startMerge(myTxps, theirTxps);
|
var mergeInfo = this._startMerge(myTxps, theirTxps);
|
||||||
this._mergeMetadata(myTxps, theirTxps, mergeInfo);
|
hasChanged += this._mergeMetadata(myTxps, theirTxps, mergeInfo);
|
||||||
this._mergeBuilder(myTxps, theirTxps, mergeInfo);
|
hasChanged += this._mergeBuilder(myTxps, theirTxps, mergeInfo);
|
||||||
|
|
||||||
Object.keys(mergeInfo.toMerge).forEach(function(hash) {
|
Object.keys(mergeInfo.toMerge).forEach(function(hash) {
|
||||||
mergeInfo.ready[hash] = myTxps[hash];
|
mergeInfo.ready[hash] = myTxps[hash];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mergeInfo.stats.hasChanged = hasChanged;
|
||||||
|
|
||||||
this.txps=mergeInfo.ready;
|
this.txps=mergeInfo.ready;
|
||||||
return mergeInfo.stats;
|
return mergeInfo.stats;
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,7 +34,8 @@ function Wallet(opts) {
|
||||||
Wallet.parent=EventEmitter;
|
Wallet.parent=EventEmitter;
|
||||||
Wallet.prototype.log = function(){
|
Wallet.prototype.log = function(){
|
||||||
if (!this.verbose) return;
|
if (!this.verbose) return;
|
||||||
console.log(arguments);
|
if (console)
|
||||||
|
console.log.apply(console, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
Wallet.getRandomId = function() {
|
Wallet.getRandomId = function() {
|
||||||
|
@ -76,10 +77,13 @@ Wallet.prototype._handleTxProposals = function(senderId, data, isInbound) {
|
||||||
var recipients;
|
var recipients;
|
||||||
var inTxp = copay.TxProposals.fromObj(data.txProposals);
|
var inTxp = copay.TxProposals.fromObj(data.txProposals);
|
||||||
var mergeInfo = this.txProposals.merge(inTxp, true);
|
var mergeInfo = this.txProposals.merge(inTxp, true);
|
||||||
|
console.log('[Wallet.js.79:inTxp:]',inTxp); //TODO
|
||||||
|
|
||||||
var addSeen = this.addSeenToTxProposals();
|
var addSeen = this.addSeenToTxProposals();
|
||||||
|
|
||||||
|
console.log('[Wallet.js.81]', addSeen, mergeInfo); //TODO
|
||||||
// if ((mergeInfo.merged && !data.isBroadcast) || addSeen) {
|
// if ((mergeInfo.merged && !data.isBroadcast) || addSeen) {
|
||||||
if (mergeInfo.merged || addSeen) {
|
if (mergeInfo.hasChanged || addSeen) {
|
||||||
this.log('### BROADCASTING txProposals. ' );
|
this.log('### BROADCASTING txProposals. ' );
|
||||||
recipients = null;
|
recipients = null;
|
||||||
shouldSend = true;
|
shouldSend = true;
|
||||||
|
@ -191,6 +195,8 @@ console.log('[Wallet.js.177] NET START: emit CREATED'); //TODO
|
||||||
if (otherPeerId !== myPeerId) {
|
if (otherPeerId !== myPeerId) {
|
||||||
net.connectTo(otherPeerId);
|
net.connectTo(otherPeerId);
|
||||||
}
|
}
|
||||||
|
self.sendWalletReady(self.firstPeerId);
|
||||||
|
self.firstPeerId = null;
|
||||||
self.emit('refresh');
|
self.emit('refresh');
|
||||||
}
|
}
|
||||||
}, startOpts);
|
}, startOpts);
|
||||||
|
@ -203,7 +209,8 @@ Wallet.prototype.store = function(isSync) {
|
||||||
|
|
||||||
if (isSync) {
|
if (isSync) {
|
||||||
this.log('Wallet stored.'); //TODO
|
this.log('Wallet stored.'); //TODO
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
this.log('Wallet stored. REFRESH Emitted'); //TODO
|
this.log('Wallet stored. REFRESH Emitted'); //TODO
|
||||||
this.emit('refresh');
|
this.emit('refresh');
|
||||||
}
|
}
|
||||||
|
@ -291,7 +298,7 @@ Wallet.prototype.getTxProposals = function() {
|
||||||
var txp = this.txProposals.txps[k];
|
var txp = this.txProposals.txps[k];
|
||||||
var i = {txp:txp};
|
var i = {txp:txp};
|
||||||
i.ntxid = k;
|
i.ntxid = k;
|
||||||
i.signedByUs = txp.signedBy[this.privateKey.getId()]?true:false;
|
i.signedByUs = txp.signedBy[this.getMyPeerId()]?true:false;
|
||||||
ret.push(i);
|
ret.push(i);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -301,7 +308,7 @@ Wallet.prototype.getTxProposal = function(ntxid) {
|
||||||
var txp = this.txProposals.txps[ntxid];
|
var txp = this.txProposals.txps[ntxid];
|
||||||
var i = {txp:txp};
|
var i = {txp:txp};
|
||||||
i.ntxid = ntxid;
|
i.ntxid = ntxid;
|
||||||
i.signedByUs = txp.signedBy[this.privateKey.getId()]?true:false;
|
i.signedByUs = txp.signedBy[this.getMyPeerId()]?true:false;
|
||||||
return i;
|
return i;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -319,7 +326,7 @@ Wallet.prototype.sign = function(ntxid) {
|
||||||
|
|
||||||
var ret = false;
|
var ret = false;
|
||||||
if (b.signaturesAdded > before) {
|
if (b.signaturesAdded > before) {
|
||||||
txp.signedBy[self.privateKey.getId()] = Date.now();
|
txp.signedBy[self.getMyPeerId()] = Date.now();
|
||||||
this.sendTxProposals();
|
this.sendTxProposals();
|
||||||
this.store(true);
|
this.store(true);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
@ -342,8 +349,9 @@ Wallet.prototype.sendTx = function(ntxid) {
|
||||||
this.blockchain.sendRawTransaction(txHex, function(txid) {
|
this.blockchain.sendRawTransaction(txHex, function(txid) {
|
||||||
self.log('BITCOND txid:',txid); //TODO
|
self.log('BITCOND txid:',txid); //TODO
|
||||||
if (txid) {
|
if (txid) {
|
||||||
self.txProposals.remove(ntxid);
|
self.txProposals.setSent(ntxid);
|
||||||
self.store(true);
|
self.sendTxProposals();
|
||||||
|
self.store();
|
||||||
}
|
}
|
||||||
return (txid);
|
return (txid);
|
||||||
});
|
});
|
||||||
|
@ -351,12 +359,15 @@ Wallet.prototype.sendTx = function(ntxid) {
|
||||||
|
|
||||||
Wallet.prototype.addSeenToTxProposals = function() {
|
Wallet.prototype.addSeenToTxProposals = function() {
|
||||||
var ret=false;
|
var ret=false;
|
||||||
var self=this;
|
var myId=this.getMyPeerId();
|
||||||
|
|
||||||
for(var k in this.txProposals.txps) {
|
for(var k in this.txProposals.txps) {
|
||||||
var txp = this.txProposals.txps[k];
|
var txp = this.txProposals.txps[k];
|
||||||
if (!txp.seenBy[self.privateKey.getId()]) {
|
console.log('[Wallet.js.364:txp:] ADD SEEN',txp); //TODO
|
||||||
txp.seenBy[self.privateKey.getId()] = Date.now();
|
if (!txp.seenBy[myId]) {
|
||||||
|
|
||||||
|
console.log('[Wallet.js.367] ADDING'); //TODO
|
||||||
|
txp.seenBy[myId] = Date.now();
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -435,9 +446,12 @@ Wallet.prototype.createTx = function(toAddress, amountSatStr, opts, cb) {
|
||||||
}
|
}
|
||||||
self.getUnspent(function(unspentList) {
|
self.getUnspent(function(unspentList) {
|
||||||
// TODO check enough funds, etc.
|
// TODO check enough funds, etc.
|
||||||
|
console.log('[Wallet.js.452]', self); //TODO
|
||||||
self.createTxSync(toAddress, amountSatStr, unspentList, opts);
|
self.createTxSync(toAddress, amountSatStr, unspentList, opts);
|
||||||
self.sendPublicKeyRing(); // Change Address
|
self.sendPublicKeyRing(); // Change Address
|
||||||
self.sendTxProposals();
|
self.sendTxProposals();
|
||||||
|
|
||||||
|
console.log('[Wallet.js.452]', self); //TODO
|
||||||
self.store();
|
self.store();
|
||||||
return cb();
|
return cb();
|
||||||
});
|
});
|
||||||
|
@ -469,15 +483,24 @@ Wallet.prototype.createTxSync = function(toAddress, amountSatStr, utxos, opts) {
|
||||||
b.sign( priv.getAll(pkr.addressIndex, pkr.changeAddressIndex) );
|
b.sign( priv.getAll(pkr.addressIndex, pkr.changeAddressIndex) );
|
||||||
}
|
}
|
||||||
var me = {};
|
var me = {};
|
||||||
if (priv) me[priv.getId()] = Date.now();
|
var myId = this.getMyPeerId();
|
||||||
|
var now = Date.now();
|
||||||
|
|
||||||
this.txProposals.add({
|
if (priv) me[myId] = now;
|
||||||
signedBy: priv && b.signaturesAdded ? me : {},
|
|
||||||
seenBy: priv ? me : {},
|
console.log('[Wallet.js.485:me:]',myId, me); //TODO
|
||||||
creator: priv.getId(),
|
|
||||||
createdTs: Date.now(),
|
var data = {
|
||||||
|
signedBy: (priv && b.signaturesAdded ? me : {}),
|
||||||
|
seenBy: (priv ? me : {}),
|
||||||
|
creator: myId,
|
||||||
|
createdTs: now,
|
||||||
builder: b,
|
builder: b,
|
||||||
});
|
};
|
||||||
|
|
||||||
|
console.log('[Wallet.js.499:data:]',data); //TODO
|
||||||
|
|
||||||
|
this.txProposals.add(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
Wallet.prototype.connectTo = function(peerId) {
|
Wallet.prototype.connectTo = function(peerId) {
|
||||||
|
|
|
@ -33,7 +33,8 @@ function WalletFactory(config) {
|
||||||
|
|
||||||
WalletFactory.prototype.log = function(){
|
WalletFactory.prototype.log = function(){
|
||||||
if (!this.verbose) return;
|
if (!this.verbose) return;
|
||||||
console.log(arguments);
|
if (console)
|
||||||
|
console.log.apply(console, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +153,7 @@ WalletFactory.prototype.joinCreateSession = function(peerId, cb) {
|
||||||
if (data.type ==='walletId') {
|
if (data.type ==='walletId') {
|
||||||
data.opts.privateKey = privateKey;
|
data.opts.privateKey = privateKey;
|
||||||
var w = self.open(data.walletId, data.opts);
|
var w = self.open(data.walletId, data.opts);
|
||||||
w.sendWalletReady(peerId);
|
w.firstPeerId = peerId;
|
||||||
return cb(w);
|
return cb(w);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -23,6 +23,7 @@ function Network(opts) {
|
||||||
this.debug = opts.debug || 3;
|
this.debug = opts.debug || 3;
|
||||||
this.maxPeers = opts.maxPeers || 10;
|
this.maxPeers = opts.maxPeers || 10;
|
||||||
this.opts = { key: opts.key };
|
this.opts = { key: opts.key };
|
||||||
|
this.connections = {};
|
||||||
|
|
||||||
// For using your own peerJs server
|
// For using your own peerJs server
|
||||||
['port', 'host', 'path', 'debug'].forEach(function(k) {
|
['port', 'host', 'path', 'debug'].forEach(function(k) {
|
||||||
|
@ -69,6 +70,9 @@ Network._arrayRemove = function(el, array) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Network.prototype._onClose = function(peerId) {
|
Network.prototype._onClose = function(peerId) {
|
||||||
|
console.log('[WebRTC.js.72:_onClose:]');
|
||||||
|
|
||||||
|
delete this.connections[peerId];
|
||||||
this.connectedPeers = Network._arrayRemove(peerId, this.connectedPeers);
|
this.connectedPeers = Network._arrayRemove(peerId, this.connectedPeers);
|
||||||
this._notifyNetworkChange();
|
this._notifyNetworkChange();
|
||||||
};
|
};
|
||||||
|
@ -138,11 +142,11 @@ Network.prototype._checkAnyPeer = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) {
|
Network.prototype._setupConnectionHandlers = function(dataConn, isInbound) {
|
||||||
|
|
||||||
var self=this;
|
var self=this;
|
||||||
|
|
||||||
dataConn.on('open', function() {
|
dataConn.on('open', function() {
|
||||||
if (!Network._inArray(dataConn.peer, self.connectedPeers)) {
|
if (!Network._inArray(dataConn.peer, self.connectedPeers)) {
|
||||||
|
self.connections[dataConn.peer] = dataConn;
|
||||||
|
|
||||||
console.log('### DATA CONNECTION READY TO: ADDING PEER: %s (inbound: %s)',
|
console.log('### DATA CONNECTION READY TO: ADDING PEER: %s (inbound: %s)',
|
||||||
dataConn.peer, isInbound);
|
dataConn.peer, isInbound);
|
||||||
|
@ -159,11 +163,14 @@ 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._onClose(dataConn.peer);
|
||||||
|
self._checkAnyPeer();
|
||||||
self.emit('dataError');
|
self.emit('dataError');
|
||||||
});
|
});
|
||||||
|
|
||||||
dataConn.on('close', function() {
|
dataConn.on('close', function() {
|
||||||
if (self.closing) return;
|
if (self.closing) return;
|
||||||
|
|
||||||
console.log('### CLOSE RECV FROM:', dataConn.peer);
|
console.log('### CLOSE RECV FROM:', dataConn.peer);
|
||||||
self._onClose(dataConn.peer);
|
self._onClose(dataConn.peer);
|
||||||
self._checkAnyPeer();
|
self._checkAnyPeer();
|
||||||
|
@ -181,8 +188,6 @@ Network.prototype._setupPeerHandlers = function(openCallback) {
|
||||||
|
|
||||||
p.on('open', function() {
|
p.on('open', function() {
|
||||||
self.connectedPeers = [self.peerId];
|
self.connectedPeers = [self.peerId];
|
||||||
|
|
||||||
console.log('[WebRTC.js.187] LENGTH', self.connectedPeers.length); //TODO
|
|
||||||
return openCallback();
|
return openCallback();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -239,18 +244,16 @@ console.log('[WebRTC.js.237] started TRUE'); //TODO
|
||||||
|
|
||||||
Network.prototype._sendToOne = function(peerId, data, cb) {
|
Network.prototype._sendToOne = function(peerId, data, cb) {
|
||||||
if (peerId !== this.peerId) {
|
if (peerId !== this.peerId) {
|
||||||
var conns = this.peer.connections[peerId];
|
var dataConn = this.connections[peerId];
|
||||||
|
if (dataConn) {
|
||||||
if (conns) {
|
|
||||||
var str = JSON.stringify({
|
var str = JSON.stringify({
|
||||||
sender: this.peerId,
|
sender: this.peerId,
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
|
dataConn.send(str);
|
||||||
for (var i = 0; i < conns.length; i++) {
|
|
||||||
var conn = conns[i];
|
|
||||||
conn.send(str);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
console.log('[WebRTC.js.255] WARN: NO CONNECTION TO:', peerId); //TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (typeof cb === 'function') cb();
|
if (typeof cb === 'function') cb();
|
||||||
|
|
Loading…
Reference in New Issue