Merge pull request #300 from maraoz/feature/socket-reconnect
Feature/socket reconnect
This commit is contained in:
commit
ac33b5c659
|
@ -19,33 +19,35 @@ module.exports.broadcastTx = function(tx) {
|
|||
if (ios) {
|
||||
var t = {};
|
||||
if (typeof tx === 'string') {
|
||||
t = { txid: tx };
|
||||
}
|
||||
else {
|
||||
t = {
|
||||
txid: tx
|
||||
};
|
||||
} else {
|
||||
t = tx;
|
||||
// Outputs
|
||||
var valueOut = 0;
|
||||
t.vout.forEach( function(o) {
|
||||
t.vout.forEach(function(o) {
|
||||
valueOut += o.value * util.COIN;
|
||||
});
|
||||
|
||||
t.valueOut = parseInt(valueOut) / util.COIN;
|
||||
}
|
||||
ios.sockets.in('inv').emit('tx', t);
|
||||
ios.sockets. in ('inv').emit('tx', t);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.broadcastBlock = function(block) {
|
||||
if (ios) ios.sockets.in('inv').emit('block', block);
|
||||
if (ios) ios.sockets. in ('inv').emit('block', block);
|
||||
};
|
||||
|
||||
module.exports.broadcastAddressTx = function(address, tx) {
|
||||
if (ios) ios.sockets.in(address).emit(address, tx);
|
||||
console.log('bcatx = '+address+' '+tx);
|
||||
if (ios) ios.sockets. in (address).emit(address, tx);
|
||||
};
|
||||
|
||||
module.exports.broadcastSyncInfo = function(historicSync) {
|
||||
|
||||
if (ios) {
|
||||
ios.sockets.in('sync').emit('status', historicSync);
|
||||
ios.sockets. in ('sync').emit('status', historicSync);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.address').controller('AddressController',
|
||||
function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket) {
|
||||
function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket) {
|
||||
$scope.global = Global;
|
||||
|
||||
$scope.findOne = function() {
|
||||
|
@ -11,18 +11,16 @@ function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket
|
|||
addrStr: $routeParams.addrStr
|
||||
},
|
||||
function(address) {
|
||||
$rootScope.titleDetail = address.addrStr.substring(0,7) + '...';
|
||||
$rootScope.titleDetail = address.addrStr.substring(0, 7) + '...';
|
||||
$rootScope.flashMessage = null;
|
||||
$scope.address = address;
|
||||
},
|
||||
function(e) {
|
||||
if (e.status === 400) {
|
||||
$rootScope.flashMessage = 'Invalid Address: ' + $routeParams.addrStr;
|
||||
}
|
||||
else if (e.status === 503) {
|
||||
} else if (e.status === 503) {
|
||||
$rootScope.flashMessage = 'Backend Error. ' + e.data;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$rootScope.flashMessage = 'Address Not Found';
|
||||
}
|
||||
$location.path('/');
|
||||
|
@ -30,12 +28,14 @@ function($scope, $rootScope, $routeParams, $location, Global, Address, getSocket
|
|||
};
|
||||
|
||||
var socket = getSocket($scope);
|
||||
socket.on('connect', function() {
|
||||
socket.emit('subscribe', $routeParams.addrStr);
|
||||
socket.on($routeParams.addrStr, function(tx) {
|
||||
console.log('AddressTx event received ' + tx);
|
||||
$rootScope.$broadcast('tx', tx);
|
||||
});
|
||||
});
|
||||
|
||||
$scope.params = $routeParams;
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -10,19 +10,13 @@ angular.module('insight.system').controller('HeaderController',
|
|||
symbol: 'BTC'
|
||||
};
|
||||
|
||||
$scope.menu = [
|
||||
{
|
||||
$scope.menu = [{
|
||||
'title': 'Blocks',
|
||||
'link': 'blocks'
|
||||
},
|
||||
{
|
||||
}, {
|
||||
'title': 'Status',
|
||||
'link': 'status'
|
||||
}
|
||||
];
|
||||
|
||||
var socket = getSocket($scope);
|
||||
socket.emit('subscribe', 'inv');
|
||||
}];
|
||||
|
||||
var _getBlock = function(hash) {
|
||||
Block.get({
|
||||
|
@ -32,11 +26,15 @@ angular.module('insight.system').controller('HeaderController',
|
|||
});
|
||||
};
|
||||
|
||||
var socket = getSocket($scope);
|
||||
socket.on('connect', function() {
|
||||
socket.emit('subscribe', 'inv');
|
||||
|
||||
socket.on('block', function(block) {
|
||||
var blockHash = block.toString();
|
||||
console.log('Updated Blocks Height!');
|
||||
_getBlock(blockHash);
|
||||
});
|
||||
});
|
||||
|
||||
$rootScope.isCollapsed = true;
|
||||
});
|
||||
});
|
||||
|
|
|
@ -17,6 +17,7 @@ angular.module('insight.system').controller('IndexController',
|
|||
};
|
||||
|
||||
var socket = getSocket($scope);
|
||||
socket.on('connect', function() {
|
||||
socket.emit('subscribe', 'inv');
|
||||
|
||||
socket.on('tx', function(tx) {
|
||||
|
@ -30,6 +31,8 @@ angular.module('insight.system').controller('IndexController',
|
|||
_getBlocks();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$scope.humanSince = function(time) {
|
||||
var m = moment.unix(time);
|
||||
return m.max().fromNow();
|
||||
|
@ -41,4 +44,4 @@ angular.module('insight.system').controller('IndexController',
|
|||
|
||||
$scope.txs = [];
|
||||
$scope.blocks = [];
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('insight.status').controller('StatusController',
|
||||
function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
|
||||
function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
|
||||
$scope.global = Global;
|
||||
|
||||
$scope.getStatus = function(q) {
|
||||
|
@ -28,14 +28,17 @@ function($scope, $routeParams, $location, Global, Status, Sync, getSocket) {
|
|||
},
|
||||
function(e) {
|
||||
var err = 'Could not get sync information' + e.toString();
|
||||
$scope.sync = { error: err };
|
||||
$scope.sync = {
|
||||
error: err
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
var socket = getSocket($scope);
|
||||
socket.on('connect', function() {
|
||||
socket.emit('subscribe', 'sync');
|
||||
socket.on('status', function(sync) {
|
||||
_onSyncUpdate(sync);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -6,9 +6,13 @@ var ScopedSocket = function(socket, $rootScope) {
|
|||
this.listeners = [];
|
||||
};
|
||||
|
||||
ScopedSocket.prototype.removeAllListeners = function() {
|
||||
ScopedSocket.prototype.removeAllListeners = function(opts) {
|
||||
if (!opts) opts = {};
|
||||
for (var i = 0; i < this.listeners.length; i++) {
|
||||
var details = this.listeners[i];
|
||||
if (opts.skipConnect && details.event === 'connect') {
|
||||
continue;
|
||||
}
|
||||
this.socket.removeListener(details.event, details.fn);
|
||||
}
|
||||
this.listeners = [];
|
||||
|
@ -47,18 +51,21 @@ ScopedSocket.prototype.emit = function(event, data, callback) {
|
|||
};
|
||||
|
||||
angular.module('insight.socket').factory('getSocket',
|
||||
function($rootScope) {
|
||||
function($rootScope) {
|
||||
var socket = io.connect(null, {
|
||||
'reconnect': true,
|
||||
'reconnection delay': 500,
|
||||
});
|
||||
});
|
||||
return function(scope) {
|
||||
var scopedSocket = new ScopedSocket(socket, $rootScope);
|
||||
scope.$on('$routeChangeStart', function() {
|
||||
});
|
||||
scope.$on('$destroy', function() {
|
||||
scopedSocket.removeAllListeners();
|
||||
});
|
||||
socket.on('connect', function() {
|
||||
scopedSocket.removeAllListeners({
|
||||
skipConnect: true
|
||||
});
|
||||
});
|
||||
return scopedSocket;
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue