UNPKG

insight-ui-mangacoin

Version:

An open-source frontend for the Insight API. The Insight API provides you with a convenient, powerful and simple way to query and broadcast data on the monacoin network and build your own services with it.

75 lines (65 loc) 1.81 kB
'use strict'; var ScopedSocket = function(socket, $rootScope) { this.socket = socket; this.$rootScope = $rootScope; this.listeners = []; }; 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 = []; }; ScopedSocket.prototype.on = function(event, callback) { var socket = this.socket; var $rootScope = this.$rootScope; var wrapped_callback = function() { var args = arguments; $rootScope.$apply(function() { callback.apply(socket, args); }); }; socket.on(event, wrapped_callback); this.listeners.push({ event: event, fn: wrapped_callback }); }; ScopedSocket.prototype.emit = function(event, data, callback) { var socket = this.socket; var $rootScope = this.$rootScope; var args = Array.prototype.slice.call(arguments); args.push(function() { var args = arguments; $rootScope.$apply(function() { if (callback) { callback.apply(socket, args); } }); }); socket.emit.apply(socket, args); }; angular.module('insight.socket').factory('getSocket', function($rootScope) { var socket = io.connect(null, { 'reconnect': true, 'reconnection delay': 500, }); return function(scope) { var scopedSocket = new ScopedSocket(socket, $rootScope); scope.$on('$destroy', function() { scopedSocket.removeAllListeners(); }); socket.on('connect', function() { scopedSocket.removeAllListeners({ skipConnect: true }); }); return scopedSocket; }; });