UNPKG

gch-truefx-pricefeed

Version:
86 lines (73 loc) 2.71 kB
/* * @license * angular-socket-io v0.4.1 * (c) 2014 Brian Ford http://briantford.com * License: MIT */ 'use strict'; angular.module('btford.socket-io', []). provider('socketFactory', function () { // when forwarding events, prefix the event name var defaultPrefix = 'socket:', ioSocket; // expose to provider this.$get = function ($rootScope, $timeout) { var asyncAngularify = function (socket, callback) { return callback ? function () { var args = arguments; $timeout(function () { callback.apply(socket, args); }, 0); } : angular.noop; }; return function socketFactory (options) { options = options || {}; var socket = options.ioSocket || io.connect(); var prefix = options.prefix || defaultPrefix; var defaultScope = options.scope || $rootScope; var addListener = function (eventName, callback) { socket.on(eventName, callback.__ng = asyncAngularify(socket, callback)); }; var wrappedSocket = { on: addListener, addListener: addListener, emit: function (eventName, data, callback) { var lastIndex = arguments.length - 1; var callback = arguments[lastIndex]; if(typeof callback == 'function') { callback = asyncAngularify(socket, callback); arguments[lastIndex] = callback; } return socket.emit.apply(socket, arguments); }, removeListener: function (ev, fn) { if (fn && fn.__ng) { arguments[1] = fn.__ng; } return socket.removeListener.apply(socket, arguments); }, // when socket.on('someEvent', fn (data) { ... }), // call scope.$broadcast('someEvent', data) forward: function (events, scope) { if (events instanceof Array === false) { events = [events]; } if (!scope) { scope = defaultScope; } events.forEach(function (eventName) { var prefixedEvent = prefix + eventName; var forwardBroadcast = asyncAngularify(socket, function (data) { scope.$broadcast(prefixedEvent, data); }); scope.$on('$destroy', function () { socket.removeListener(eventName, forwardBroadcast); }); socket.on(eventName, forwardBroadcast); }); } }; return wrappedSocket; }; }; });