2014-04-16 20:36:08 -07:00
|
|
|
'use strict';
|
|
|
|
|
2014-06-03 13:42:36 -07:00
|
|
|
angular.module('copayApp.services').factory('Socket',
|
2014-04-16 20:36:08 -07:00
|
|
|
function($rootScope) {
|
2014-04-18 15:08:01 -07:00
|
|
|
var listeners = [];
|
2014-06-26 14:47:27 -07:00
|
|
|
var url = (config.socket.schema || 'http') + '://' + config.socket.host + ':' + config.socket.port;
|
|
|
|
var opts = {
|
2014-06-04 14:10:47 -07:00
|
|
|
'reconnection': true,
|
2014-06-05 08:18:54 -07:00
|
|
|
'reconnectionDelay': config.socket.reconnectDelay || 500,
|
2014-06-26 14:47:27 -07:00
|
|
|
'secure': config.socket.schema === 'https' ? true : false,
|
|
|
|
};
|
|
|
|
|
|
|
|
var socket = io(url, opts);
|
2014-04-18 15:08:01 -07:00
|
|
|
|
|
|
|
return {
|
|
|
|
on: function(event, callback) {
|
|
|
|
var wrappedCallback = function() {
|
|
|
|
var args = arguments;
|
|
|
|
$rootScope.$apply(function() {
|
|
|
|
callback.apply(socket, args);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
socket.on(event, wrappedCallback);
|
|
|
|
if (event !== 'connect') {
|
|
|
|
listeners.push({
|
|
|
|
event: event,
|
|
|
|
fn: wrappedCallback
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
2014-06-04 14:10:47 -07:00
|
|
|
sysOn: function(event, callback) {
|
|
|
|
var wrappedCallback = function() {
|
|
|
|
var args = arguments;
|
|
|
|
$rootScope.$apply(function() {
|
|
|
|
callback.apply(socket, args);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
socket.io.on(event, wrappedCallback);
|
|
|
|
},
|
2014-05-16 14:33:06 -07:00
|
|
|
getListeners: function() {
|
|
|
|
var ret = {};
|
2014-06-04 14:10:47 -07:00
|
|
|
|
|
|
|
var addrList = listeners
|
2014-06-24 08:57:15 -07:00
|
|
|
.filter(function(i) {
|
|
|
|
return i.event != 'block';
|
|
|
|
})
|
|
|
|
.map(function(i) {
|
|
|
|
return i.event;
|
|
|
|
});
|
2014-06-04 14:10:47 -07:00
|
|
|
|
2014-05-16 14:33:06 -07:00
|
|
|
for (var i in addrList) {
|
|
|
|
ret[addrList[i]] = 1;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
},
|
2014-06-23 10:57:23 -07:00
|
|
|
isListeningBlocks: function() {
|
2014-06-24 08:57:15 -07:00
|
|
|
return listeners.filter(function(i) {
|
|
|
|
return i.event == 'block';
|
|
|
|
}).length > 0;
|
2014-06-23 10:57:23 -07:00
|
|
|
},
|
2014-04-18 15:08:01 -07:00
|
|
|
emit: function(event, data, callback) {
|
|
|
|
socket.emit(event, data, function() {
|
|
|
|
var args = arguments;
|
|
|
|
$rootScope.$apply(function() {
|
|
|
|
if (callback) {
|
|
|
|
callback.apply(socket, args);
|
|
|
|
}
|
|
|
|
});
|
2014-04-16 20:36:08 -07:00
|
|
|
});
|
2014-04-18 15:08:01 -07:00
|
|
|
},
|
|
|
|
removeAllListeners: function() {
|
|
|
|
for (var i = 0; i < listeners.length; i++) {
|
|
|
|
var details = listeners[i];
|
2014-06-24 08:57:15 -07:00
|
|
|
socket.removeAllListeners(details.event);
|
2014-04-18 15:08:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
listeners = [];
|
|
|
|
}
|
2014-04-16 20:36:08 -07:00
|
|
|
};
|
|
|
|
});
|