refactor subscription data structure
This commit is contained in:
parent
26d4d5c434
commit
b408f8108a
25
lib/wsapp.js
25
lib/wsapp.js
|
@ -21,10 +21,7 @@ log.level = 'debug';
|
||||||
|
|
||||||
var io;
|
var io;
|
||||||
var blockExplorerSockets = {};
|
var blockExplorerSockets = {};
|
||||||
var subscriptions = {
|
var subscriptions = {};
|
||||||
wallets: {},
|
|
||||||
addresses: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
var WsApp = function() {};
|
var WsApp = function() {};
|
||||||
|
|
||||||
|
@ -34,11 +31,13 @@ WsApp._unauthorized = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
WsApp.subscribeAddresses = function(walletId, addresses) {
|
WsApp.subscribeAddresses = function(walletId, addresses) {
|
||||||
|
$.checkArgument(walletId);
|
||||||
|
|
||||||
if (!addresses || addresses.length == 0) return;
|
if (!addresses || addresses.length == 0) return;
|
||||||
|
|
||||||
function handlerFor(walletId, address, txid) {
|
function handlerFor(address, txid) {
|
||||||
var notification = Notification.create({
|
var notification = Notification.create({
|
||||||
walletId: walletId,
|
walletId: this,
|
||||||
type: 'NewIncomingTx',
|
type: 'NewIncomingTx',
|
||||||
data: {
|
data: {
|
||||||
address: address,
|
address: address,
|
||||||
|
@ -48,24 +47,28 @@ WsApp.subscribeAddresses = function(walletId, addresses) {
|
||||||
WsApp._sendNotification(notification);
|
WsApp._sendNotification(notification);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!subscriptions[walletId]) {
|
||||||
|
subscriptions[walletId] = {
|
||||||
|
addresses: [],
|
||||||
|
};
|
||||||
|
};
|
||||||
var addresses = [].concat(addresses);
|
var addresses = [].concat(addresses);
|
||||||
var network = Bitcore.Address.fromString(addresses[0]).network;
|
var network = Bitcore.Address.fromString(addresses[0]).network;
|
||||||
var socket = blockExplorerSockets[network];
|
var socket = blockExplorerSockets[network];
|
||||||
_.each(addresses, function(address) {
|
_.each(addresses, function(address) {
|
||||||
subscriptions[address] = walletId;
|
subscriptions[walletId].addresses.push(address);
|
||||||
socket.emit('subscribe', address);
|
socket.emit('subscribe', address);
|
||||||
socket.on(address, _.bind(handlerFor, null, walletId, address));
|
socket.on(address, _.bind(handlerFor, walletId, address));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
WsApp.subscribeWallet = function(serviceInstance) {
|
WsApp.subscribeWallet = function(serviceInstance) {
|
||||||
var walletId = serviceInstance.walletId;
|
var walletId = serviceInstance.walletId;
|
||||||
if (subscriptions.wallets[walletId]) return;
|
if (subscriptions[walletId]) return;
|
||||||
|
|
||||||
subscriptions.wallets[walletId] = true;
|
|
||||||
serviceInstance.getMainAddresses({}, function(err, addresses) {
|
serviceInstance.getMainAddresses({}, function(err, addresses) {
|
||||||
if (err) {
|
if (err) {
|
||||||
delete subscriptions.wallets[walletId];
|
delete subscriptions[walletId];
|
||||||
log.warn('Could not subscribe to addresses for wallet ' + serviceInstance.walletId);
|
log.warn('Could not subscribe to addresses for wallet ' + serviceInstance.walletId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue