From 4b68002622ac7390584596a4ef0ef1e34088a9b5 Mon Sep 17 00:00:00 2001 From: knalli Date: Mon, 15 Dec 2014 21:38:59 +0100 Subject: [PATCH 1/3] feat(service): improve memory usage, remove empty arrays of handlers --- src/service.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/service.coffee b/src/service.coffee index f093bb9..e756b51 100644 --- a/src/service.coffee +++ b/src/service.coffee @@ -276,6 +276,8 @@ angular.module('knalli.angular-vertxbus') if wrapped.handlers[address] index = wrapped.handlers[address].indexOf(callback) wrapped.handlers[address].splice(index, 1) if index > -1 + if wrapped.handlers[address].length < 1 + wrapped.handlers[address] = undefined return #void deconstructor.displayName = "#{CONSTANTS.MODULE}/#{CONSTANTS.COMPONENT}: wrapped.registerHandler (deconstructor)" return deconstructor @@ -285,6 +287,8 @@ angular.module('knalli.angular-vertxbus') if wrapped.handlers[address] index = wrapped.handlers[address].indexOf(callback) wrapped.handlers[address].splice(index, 1) if index > -1 + if wrapped.handlers[address].length < 1 + wrapped.handlers[address] = undefined # Remove from real instance if connectionState is vertxEventBus.EventBus.OPEN then util.unregisterHandler(address, callback) # Stub for util.send From ef4bfe5986a57fa79927f801bb07c16549eaa96e Mon Sep 17 00:00:00 2001 From: knalli Date: Mon, 15 Dec 2014 21:39:29 +0100 Subject: [PATCH 2/3] Bump for next version --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index c4633dc..416e9b6 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "author": "Jan Philipp", "name": "angular-vertxbus", "description": "AngularJS facade and service acting as a Vert.x SockJS client", - "version": "0.10.0", + "version": "0.11.0", "homepage": "http://github.com/knalli/angular-vertxbus", "main": "./dist/angular-vertxbus.js", "keywords": ["angular", "vertx", "facade", "websocket"], diff --git a/package.json b/package.json index 8f063fe..4971b4d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-vertxbus", - "version": "0.10.0", + "version": "0.11.0", "description": "AngularJS facade and service acting as a Vert.x SockJS client", "main": "dist/angular-vertxbus.js", "keywords": ["angular", "vertx", "facade", "websocket"], From 3c9be73c7d41f22b4b46a0dbf17880063bddf7a9 Mon Sep 17 00:00:00 2001 From: knalli Date: Thu, 18 Dec 2014 21:48:12 +0100 Subject: [PATCH 3/3] feat(): replace console w/ $log Solves #34 --- src/service.coffee | 8 ++++---- src/wrapper.coffee | 10 +++++----- test/unit/angularVertxbusAdapterSpec.js | 20 ++++++++++++-------- test/unit/mock/sockjs.coffee | 9 ++++++--- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/service.coffee b/src/service.coffee index e756b51..25d44b9 100644 --- a/src/service.coffee +++ b/src/service.coffee @@ -125,7 +125,7 @@ angular.module('knalli.angular-vertxbus') return this @skipUnauthorizeds.displayName = "#{CONSTANTS.MODULE}/#{CONSTANTS.COMPONENT}: provider.skipUnauthorizeds" - @$get = ($rootScope, $q, $interval, $timeout, vertxEventBus) -> + @$get = ($rootScope, $q, $interval, $timeout, vertxEventBus, $log) -> # Extract options (with defaults) { enabled, debugEnabled, prefix, urlServer, urlPath, reconnectEnabled, sockjsStateInterval, sockjsReconnectInterval, sockjsOptions, @@ -181,7 +181,7 @@ angular.module('knalli.angular-vertxbus') return true else # ignore this message - console.debug("[Vert.x EB Service] Message was not sent because login is required") if debugEnabled + $log.debug("[Vert.x EB Service] Message was not sent because login is required") if debugEnabled return false wrapFn.displayName = "#{CONSTANTS.MODULE}/#{CONSTANTS.COMPONENT}: ensureOpenAuthConnection function wrapper" ensureOpenConnection wrapFn @@ -193,7 +193,7 @@ angular.module('knalli.angular-vertxbus') # Register a callback handler for the specified address match. registerHandler : (address, callback) -> return unless typeof callback is 'function' - console.debug("[Vert.x EB Service] Register handler for #{address}") if debugEnabled + $log.debug("[Vert.x EB Service] Register handler for #{address}") if debugEnabled return deconstructors.get(callback) if deconstructors.containsKey(callback) # already known deconstructor = (message, replyTo) -> callback(message, replyTo) @@ -205,7 +205,7 @@ angular.module('knalli.angular-vertxbus') # Remove a callback handler for the specified address match. unregisterHandler : (address, callback) -> return unless typeof callback is 'function' - console.debug("[Vert.x EB Service] Unregister handler for #{address}") if debugEnabled + $log.debug("[Vert.x EB Service] Unregister handler for #{address}") if debugEnabled vertxEventBus.unregisterHandler address, deconstructors.get(callback) deconstructors.remove(callback) return #void diff --git a/src/wrapper.coffee b/src/wrapper.coffee index 130d6ff..b3ed6ed 100644 --- a/src/wrapper.coffee +++ b/src/wrapper.coffee @@ -100,7 +100,7 @@ angular.module('knalli.angular-vertxbus') Furthermore, the stub supports theses extra APIs: - recconnect() ### - @$get = ($timeout) -> + @$get = ($timeout, $log) -> # Extract options (with defaults) { enabled, debugEnabled, prefix, urlServer, urlPath, reconnectEnabled, sockjsStateInterval, sockjsReconnectInterval, sockjsOptions @@ -111,18 +111,18 @@ angular.module('knalli.angular-vertxbus') if enabled and EventBusOriginal url = "#{urlServer}#{urlPath}" - console.debug("[Vert.x EB Stub] Enabled: connecting '#{url}'") if debugEnabled + $log.debug("[Vert.x EB Stub] Enabled: connecting '#{url}'") if debugEnabled # Because we have rebuild an EventBus object (because it have to rebuild a SockJS object) # we must wrap the object. Therefore, we have to mimic the behavior of onopen and onclose each time. eventBus = null connect = -> eventBus = new EventBusOriginal url, undefined, sockjsOptions eventBus.onopen = -> - console.debug("[Vert.x EB Stub] Connected") if debugEnabled + $log.debug("[Vert.x EB Stub] Connected") if debugEnabled EventBusStub.onopen() if typeof EventBusStub.onopen is 'function' return #void eventBus.onclose = -> - console.debug("[Vert.x EB Stub] Reconnect in #{sockjsReconnectInterval}ms") if debugEnabled + $log.debug("[Vert.x EB Stub] Reconnect in #{sockjsReconnectInterval}ms") if debugEnabled EventBusStub.onclose() if typeof EventBusStub.onclose is 'function' $timeout(connect, sockjsReconnectInterval) if reconnectEnabled return #void @@ -168,7 +168,7 @@ angular.module('knalli.angular-vertxbus') EventBusStub.getOptions.displayName = "#{CONSTANTS.MODULE}/#{CONSTANTS.COMPONENT}: EventBusStub.getOptions" else - console.debug("[Vert.x EB Stub] Disabled") if debugEnabled + $log.debug("[Vert.x EB Stub] Disabled") if debugEnabled return EventBusStub diff --git a/test/unit/angularVertxbusAdapterSpec.js b/test/unit/angularVertxbusAdapterSpec.js index 61f4d5e..d5ebe43 100644 --- a/test/unit/angularVertxbusAdapterSpec.js +++ b/test/unit/angularVertxbusAdapterSpec.js @@ -1,5 +1,5 @@ /* jshint camelcase: false, undef: true, unused: true, browser: true */ -/* global console: false, module: false, describe: false, it: false, expect: false, beforeEach: false, inject: false, SockJS: false */ +/* global module: false, describe: false, it: false, expect: false, beforeEach: false, inject: false, SockJS: false */ describe('knalli.angular-vertxbus', function () { @@ -20,17 +20,19 @@ describe('knalli.angular-vertxbus', function () { describe('vertxEventBus', function () { - var vertxEventBus, $timeout, $rootScope; + var vertxEventBus, $timeout, $rootScope, $log; beforeEach(module('knalli.angular-vertxbus', function (vertxEventBusProvider) { // Override (improve test running time) vertxEventBusProvider.useDebug(true).useSockJsReconnectInterval(2000); })); - beforeEach(inject(function (_vertxEventBus_, _$timeout_, _$rootScope_) { + beforeEach(inject(function (_vertxEventBus_, _$timeout_, _$rootScope_, _$log_) { vertxEventBus = _vertxEventBus_; $timeout = _$timeout_; $rootScope = _$rootScope_; + $log = _$log_; + SockJS.currentMockInstance.$log = $log; })); it('should be an object', function () { @@ -88,11 +90,11 @@ describe('knalli.angular-vertxbus', function () { var okClose = false, okOpen = false; setTimeout(function () { vertxEventBus.onclose = function () { - console.debug('[TEST] onclose() called'); + $log.debug('[TEST] onclose() called'); okClose = true; }; vertxEventBus.onopen = function () { - console.debug('[TEST] onopen() called'); + $log.debug('[TEST] onopen() called'); okOpen = true; }; vertxEventBus.reconnect(); @@ -486,23 +488,25 @@ describe('knalli.angular-vertxbus', function () { }); describe('should not send message', function () { - var vertxEventBus, vertxEventBusService, $rootScope, $timeout, result; + var vertxEventBus, vertxEventBusService, $rootScope, $timeout, $log, result; beforeEach(module('knalli.angular-vertxbus', function (vertxEventBusProvider, vertxEventBusServiceProvider) { vertxEventBusProvider.useMessageBuffer(0); vertxEventBusServiceProvider.requireLogin(true); })); - beforeEach(inject(function (_vertxEventBus_, _vertxEventBusService_, _$rootScope_, _$timeout_) { + beforeEach(inject(function (_vertxEventBus_, _vertxEventBusService_, _$rootScope_, _$timeout_, _$log_) { vertxEventBus = _vertxEventBus_; vertxEventBusService = _vertxEventBusService_; $rootScope = _$rootScope_; $timeout = _$timeout_; + $log = _$log_; + SockJS.currentMockInstance.$log = $log; vertxEventBus.readyState = function () { return vertxEventBus.EventBus.OPEN; }; vertxEventBus.send = function (address, message, replyHandler) { - console.debug('XY', address, message, replyHandler); + $log.debug('XY', address, message, replyHandler); result = true; }; })); diff --git a/test/unit/mock/sockjs.coffee b/test/unit/mock/sockjs.coffee index 59bbcc3..e37e120 100644 --- a/test/unit/mock/sockjs.coffee +++ b/test/unit/mock/sockjs.coffee @@ -14,7 +14,6 @@ class SockJS constructor: (@url, @whitelist, @options, mockOptions) -> SockJS.mockInstances.push this SockJS.currentMockInstance = this - console.debug "[MOCK] SockJS Constructur(#{url})" fn = => @onopen() if typeof @onopen is 'function' return @@ -23,8 +22,12 @@ class SockJS else window.setTimeout fn, 1 + log: -> + log = SockJS.currentMockInstance?.$log or window.console + log.debug.apply(this, arguments) + close: (mockOptions)-> - console.debug "[MOCK] SockJS.close()" + @log "[MOCK] SockJS.close()" fn = => @onclose() if typeof @onclose is 'function' return @@ -42,7 +45,7 @@ class SockJS data = @_unwrapFromEvent(message) catch e return - console.debug "[MOCK] SockJS.send(#{message})" + @log "[MOCK] SockJS.send(#{message})" if data.address is 'vertx.basicauthmanager.login' reply = if @nextLoginState @_buildLoginReplyAsSuccess(data.body.username, data.body.password)