var io = require('socket.io') module.exports = function SocketFactory( $rootScope , VersionUpdateService , AppState ) { var websocketUrl = AppState.config.websocketUrl || '' var socket = io(websocketUrl, { reconnection: false, transports: ['websocket'] }) socket.scoped = function($scope) { var listeners = [] $scope.$on('$destroy', function() { listeners.forEach(function(listener) { socket.removeListener(listener.event, listener.handler) }) }) return { on: function(event, handler) { listeners.push({ event: event, handler: handler }) socket.on(event, handler) return this } } } socket.on('outdated', function() { VersionUpdateService.open() }) socket.on('socket.ip', function(ip) { $rootScope.$apply(function() { socket.ip = ip }) }) return socket }