From 0a482885e3cc07fd69b9ded4c7736686132a63cf Mon Sep 17 00:00:00 2001 From: knalli Date: Thu, 18 Dec 2014 22:15:16 +0100 Subject: [PATCH] Release 0.11.0 --- CHANGELOG.md | 10 ++++++++++ dist/angular-vertxbus.js | 26 ++++++++++++++++---------- dist/angular-vertxbus.min.js | 2 +- dist/requirejs/angular-vertxbus.js | 26 ++++++++++++++++---------- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec5145c..2f10cff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## 0.11.0 (2014-12-18) + + +#### Features + +* replace console w/ $log ([3c9be73c](http://github.com/knalli/angular-vertxbus/commit/3c9be73c7d41f22b4b46a0dbf17880063bddf7a9)) +* **service:** improve memory usage, remove empty arrays of handlers ([4b680026](http://github.com/knalli/angular-vertxbus/commit/4b68002622ac7390584596a4ef0ef1e34088a9b5)) + + ## 0.10.0 (2014-12-14) diff --git a/dist/angular-vertxbus.js b/dist/angular-vertxbus.js index 78200fb..e578040 100644 --- a/dist/angular-vertxbus.js +++ b/dist/angular-vertxbus.js @@ -1,4 +1,4 @@ -/*! angular-vertxbus - v0.10.0 - 2014-12-14 +/*! angular-vertxbus - v0.11.0 - 2014-12-18 * http://github.com/knalli/angular-vertxbus * Copyright (c) 2014 ; Licensed */ (function() { @@ -139,7 +139,7 @@ Furthermore, the stub supports theses extra APIs: - recconnect() */ - this.$get = ['$timeout', function($timeout) { + this.$get = ['$timeout', '$log', function($timeout, $log) { var EventBusOriginal, EventBusStub, connect, debugEnabled, enabled, eventBus, prefix, reconnectEnabled, sockjsOptions, sockjsReconnectInterval, sockjsStateInterval, url, urlPath, urlServer, _ref; _ref = angular.extend({}, DEFAULT_OPTIONS, options), enabled = _ref.enabled, debugEnabled = _ref.debugEnabled, prefix = _ref.prefix, urlServer = _ref.urlServer, urlPath = _ref.urlPath, reconnectEnabled = _ref.reconnectEnabled, sockjsStateInterval = _ref.sockjsStateInterval, sockjsReconnectInterval = _ref.sockjsReconnectInterval, sockjsOptions = _ref.sockjsOptions; EventBusStub = null; @@ -147,14 +147,14 @@ if (enabled && EventBusOriginal) { url = "" + urlServer + urlPath; if (debugEnabled) { - console.debug("[Vert.x EB Stub] Enabled: connecting '" + url + "'"); + $log.debug("[Vert.x EB Stub] Enabled: connecting '" + url + "'"); } eventBus = null; connect = function() { eventBus = new EventBusOriginal(url, void 0, sockjsOptions); eventBus.onopen = function() { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Connected"); + $log.debug("[Vert.x EB Stub] Connected"); } if (typeof EventBusStub.onopen === 'function') { EventBusStub.onopen(); @@ -162,7 +162,7 @@ }; eventBus.onclose = function() { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Reconnect in " + sockjsReconnectInterval + "ms"); + $log.debug("[Vert.x EB Stub] Reconnect in " + sockjsReconnectInterval + "ms"); } if (typeof EventBusStub.onclose === 'function') { EventBusStub.onclose(); @@ -224,7 +224,7 @@ EventBusStub.getOptions.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": EventBusStub.getOptions"; } else { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Disabled"); + $log.debug("[Vert.x EB Stub] Disabled"); } } return EventBusStub; @@ -419,7 +419,7 @@ return this; }; this.skipUnauthorizeds.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": provider.skipUnauthorizeds"; - this.$get = ['$rootScope', '$q', '$interval', '$timeout', 'vertxEventBus', function($rootScope, $q, $interval, $timeout, vertxEventBus) { + this.$get = ['$rootScope', '$q', '$interval', '$timeout', 'vertxEventBus', '$log', function($rootScope, $q, $interval, $timeout, vertxEventBus, $log) { var connectionIntervalCheck, connectionState, debugEnabled, deconstructors, enabled, ensureOpenAuthConnection, ensureOpenConnection, loginPromise, messageBuffer, messageQueue, prefix, reconnectEnabled, sockjsOptions, sockjsReconnectInterval, sockjsStateInterval, urlPath, urlServer, util, validSession, wrapped, _ref, _ref1; _ref = (vertxEventBus != null ? vertxEventBus.getOptions() : void 0) || {}, enabled = _ref.enabled, debugEnabled = _ref.debugEnabled, prefix = _ref.prefix, urlServer = _ref.urlServer, urlPath = _ref.urlPath, reconnectEnabled = _ref.reconnectEnabled, sockjsStateInterval = _ref.sockjsStateInterval, sockjsReconnectInterval = _ref.sockjsReconnectInterval, sockjsOptions = _ref.sockjsOptions, messageBuffer = _ref.messageBuffer; connectionState = vertxEventBus != null ? (_ref1 = vertxEventBus.EventBus) != null ? _ref1.CLOSED : void 0 : void 0; @@ -480,7 +480,7 @@ return true; } else { if (debugEnabled) { - console.debug("[Vert.x EB Service] Message was not sent because login is required"); + $log.debug("[Vert.x EB Service] Message was not sent because login is required"); } return false; } @@ -497,7 +497,7 @@ return; } if (debugEnabled) { - console.debug("[Vert.x EB Service] Register handler for " + address); + $log.debug("[Vert.x EB Service] Register handler for " + address); } if (deconstructors.containsKey(callback)) { return deconstructors.get(callback); @@ -515,7 +515,7 @@ return; } if (debugEnabled) { - console.debug("[Vert.x EB Service] Unregister handler for " + address); + $log.debug("[Vert.x EB Service] Unregister handler for " + address); } vertxEventBus.unregisterHandler(address, deconstructors.get(callback)); deconstructors.remove(callback); @@ -611,6 +611,9 @@ wrapped.handlers[address].splice(index, 1); } } + if (wrapped.handlers[address].length < 1) { + wrapped.handlers[address] = void 0; + } }; deconstructor.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": wrapped.registerHandler (deconstructor)"; return deconstructor; @@ -623,6 +626,9 @@ wrapped.handlers[address].splice(index, 1); } } + if (wrapped.handlers[address].length < 1) { + wrapped.handlers[address] = void 0; + } if (connectionState === vertxEventBus.EventBus.OPEN) { return util.unregisterHandler(address, callback); } diff --git a/dist/angular-vertxbus.min.js b/dist/angular-vertxbus.min.js index f4d4605..5979d02 100644 --- a/dist/angular-vertxbus.min.js +++ b/dist/angular-vertxbus.min.js @@ -1 +1 @@ -(function(){var a={}.hasOwnProperty;angular.module("knalli.angular-vertxbus",["ng"]),angular.module("knalli.angular-vertxbus").provider("vertxEventBus",function(){var a,b,c;a={MODULE:"angular-vertxbus",COMPONENT:"wrapper"},b={enabled:!0,debugEnabled:!1,prefix:"vertx-eventbus.",urlServer:""+location.protocol+"//"+location.hostname+":"+(location.port||80),urlPath:"/eventbus",reconnectEnabled:!0,sockjsStateInterval:1e4,sockjsReconnectInterval:1e4,sockjsOptions:{},messageBuffer:0},c=angular.extend({},b),this.enable=function(a){return null==a&&(a=b.enabled),c.enabled=a===!0,this},this.enable.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.enable",this.useDebug=function(a){return null==a&&(a=b.debugEnabled),c.debugEnabled=a===!0,this},this.useDebug.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useDebug",this.usePrefix=function(a){return null==a&&(a=b.prefix),c.prefix=a,this},this.usePrefix.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.usePrefix",this.useUrlServer=function(a){return null==a&&(a=b.urlServer),c.urlServer=a,this},this.useUrlServer.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useUrlServer",this.useUrlPath=function(a){return null==a&&(a=b.urlPath),c.urlPath=a,this},this.useUrlPath.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useUrlPath",this.useReconnect=function(a){return null==a&&(a=b.reconnectEnabled),c.reconnectEnabled=a,this},this.useReconnect.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useReconnect",this.useSockJsStateInterval=function(a){return null==a&&(a=b.sockjsStateInterval),c.sockjsStateInterval=a,this},this.useSockJsStateInterval.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsStateInterval",this.useSockJsReconnectInterval=function(a){return null==a&&(a=b.sockjsReconnectInterval),c.sockjsReconnectInterval=a,this},this.useSockJsReconnectInterval.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsReconnectInterval",this.useSockJsOptions=function(a){return null==a&&(a=b.sockjsOptions),c.sockjsOptions=a,this},this.useSockJsOptions.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsOptions",this.useMessageBuffer=function(a){return null==a&&(a=b.messageBuffer),c.messageBuffer=a,this},this.useMessageBuffer.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useMessageBuffer",this.$get=["$timeout",function(d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;return s=angular.extend({},b,c),i=s.enabled,h=s.debugEnabled,k=s.prefix,r=s.urlServer,q=s.urlPath,l=s.reconnectEnabled,o=s.sockjsStateInterval,n=s.sockjsReconnectInterval,m=s.sockjsOptions,f=null,e="undefined"!=typeof vertx&&null!==vertx?vertx.EventBus:void 0,i&&e?(p=""+r+q,h&&console.debug("[Vert.x EB Stub] Enabled: connecting '"+p+"'"),j=null,g=function(){j=new e(p,void 0,m),j.onopen=function(){h&&console.debug("[Vert.x EB Stub] Connected"),"function"==typeof f.onopen&&f.onopen()},j.onclose=function(){h&&console.debug("[Vert.x EB Stub] Reconnect in "+n+"ms"),"function"==typeof f.onclose&&f.onclose(),l&&d(g,n)}},g(),f={reconnect:function(){return j.close()},close:function(){return j.close()},login:function(a,b,c){return j.login(a,b,c)},send:function(a,b,c){return j.send(a,b,c)},publish:function(a,b){return j.publish(a,b)},registerHandler:function(b,c){var d;return j.registerHandler(b,c),d=function(){f.unregisterHandler(b,c)},d.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.registerHandler (deconstructor)",d},unregisterHandler:function(a,b){return j.unregisterHandler(a,b)},readyState:function(){return j.readyState()},EventBus:e,getOptions:function(){return angular.extend({},c)}},f.reconnect.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.reconnect",f.close.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.close",f.login.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.login",f.send.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.send",f.publish.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.publish",f.registerHandler.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.registerHandler",f.unregisterHandler.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.unregisterHandler",f.readyState.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.readyState",f.getOptions.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.getOptions"):h&&console.debug("[Vert.x EB Stub] Disabled"),f}],this.$get.displayName=""+a.MODULE+"/"+a.COMPONENT+": Factory.get"}),angular.module("knalli.angular-vertxbus").provider("vertxEventBusService",function(){var b,c,d,e,f;b={MODULE:"angular-vertxbus",COMPONENT:"service"},c={loginRequired:!1,loginBlockForSession:!1,skipUnauthorizeds:!0},d=function(){function a(a){this.maxSize=null!=a?a:10,this.items=[]}return a.prototype.push=function(a){return this.items.push(a),this.recalibrateBufferSize()},a.prototype.recalibrateBufferSize=function(){for(;this.items.length>this.maxSize;)this.first();return this},a.prototype.last=function(){return this.items.pop()},a.prototype.first=function(){return this.items.shift(0)},a.prototype.size=function(){return this.items.length},a}(),e=function(){function a(){this.keys=[],this.values=[]}return a.prototype.keys=null,a.prototype.values=null,a.prototype.put=function(a,b){var c;return c=this._indexForKey(a),c>-1?this.values[c]=b:(this.keys.push(a),this.values.push(b)),this},a.prototype.get=function(a){var b;return b=this._indexForKey(a),b>-1?this.values[b]:void 0},a.prototype.containsKey=function(a){var b;return b=this._indexForKey(a),b>-1},a.prototype.containsValue=function(a){var b;return b=this._indexForValue(a),b>-1},a.prototype.remove=function(a){var b;b=this._indexForKey(a),b>-1&&(this.keys[b]=void 0,this.values[b]=void 0)},a.prototype.clear=function(){return this.keys=[],this.values=[],this},a.prototype._indexForKey=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],a===c)return b;return-1},a.prototype._indexForValue=function(a){var b,c,d,e,f;for(f=this.values,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],a===c)return b;return-1},a}(),f=angular.extend({},c),this.requireLogin=function(a){return null==a&&(a=f.loginRequired),f.loginRequired=a,this},this.requireLogin.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.requireLogin",this.blockForSession=function(a){return null==a&&(a=f.loginBlockForSession),f.loginBlockForSession=a,this},this.blockForSession.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.blockForSession",this.skipUnauthorizeds=function(a){return null==a&&(a=f.skipUnauthorizeds),f.skipUnauthorizeds=a,this},this.skipUnauthorizeds.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.skipUnauthorizeds",this.$get=["$rootScope","$q","$interval","$timeout","vertxEventBus",function(c,g,h,i,j){var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;return E=(null!=j?j.getOptions():void 0)||{},o=E.enabled,m=E.debugEnabled,u=E.prefix,A=E.urlServer,z=E.urlPath,v=E.reconnectEnabled,y=E.sockjsStateInterval,x=E.sockjsReconnectInterval,w=E.sockjsOptions,s=E.messageBuffer,l=null!=j&&null!=(F=j.EventBus)?F.CLOSED:void 0,C=!1,r=null,t=new d(s),n=new e,o&&j&&(j.onopen=function(){var b,d,e,f,g,h,i;D.getConnectionState(!0),c.$broadcast(""+u+"system.connected"),i=D.handlers;for(b in i)if(a.call(i,b))for(e=i[b],g=0,h=e.length;h>g;g++)d=e[g],B.registerHandler(b,d);if(c.$digest(),s&&t.size()){for(;t.size();)f=t.first(),"function"==typeof f&&f();c.$digest()}},j.onclose=function(){return D.getConnectionState(!0),c.$broadcast(""+u+"system.disconnected")},j.onclose.displayName=""+b.MODULE+"/"+b.COMPONENT+": 'onclose' handler"),q=function(a){return D.getConnectionState()===j.EventBus.OPEN?(a(),!0):s?(t.push(a),!0):!1},q.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenConnection",p=function(a){var c;return f.loginRequired?(c=function(){return C?(a(),!0):(m&&console.debug("[Vert.x EB Service] Message was not sent because login is required"),!1)},c.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenAuthConnection function wrapper",q(c)):q(a)},p.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenAuthConnection",B={registerHandler:function(a,d){var e;if("function"==typeof d)return m&&console.debug("[Vert.x EB Service] Register handler for "+a),n.containsKey(d)?n.get(d):(e=function(a,b){d(a,b),c.$digest()},e.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.registerHandler (deconstructor)",n.put(d,e),j.registerHandler(a,n.get(d)))},unregisterHandler:function(a,b){"function"==typeof b&&(m&&console.debug("[Vert.x EB Service] Unregister handler for "+a),j.unregisterHandler(a,n.get(b)),n.remove(b))},send:function(a,c,d){var e,f,h;return null==d&&(d=1e4),e=g.defer(),h=function(){return j.send(a,c,function(a){return e?e.resolve(a):void 0}),e?i(function(){return e.reject()},d):void 0},h.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.send (ensureOpenAuthConnection callback)",f=p(h),e&&!f&&e.reject(),null!=e?e.promise:void 0},publish:function(a,c){var d,e;return e=function(){return j.publish(a,c)},e.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.publish (ensureOpenAuthConnection callback)",d=p(e)},login:function(a,d,e){var f,h;return null==e&&(e=5e3),f=g.defer(),h=function(a){return"ok"===(null!=a?a.status:void 0)?(f.resolve(a),c.$broadcast(""+u+"system.login.succeeded",{status:null!=a?a.status:void 0})):(f.reject(a),c.$broadcast(""+u+"system.login.failed",{status:null!=a?a.status:void 0}))},h.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.login (callback)",j.login(a,d,h),i(function(){return f.reject()},e),f.promise}},B.registerHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.registerHandler",B.unregisterHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.unregisterHandler",B.send.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.send",B.publish.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.publish",B.login.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.login",D={handlers:{},registerHandler:function(a,c){var d,e;return D.handlers[a]||(D.handlers[a]=[]),D.handlers[a].push(c),e=null,l===j.EventBus.OPEN&&(e=B.registerHandler(a,c)),d=function(){var b;e&&e(),D.handlers[a]&&(b=D.handlers[a].indexOf(c),b>-1&&D.handlers[a].splice(b,1))},d.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.registerHandler (deconstructor)",d},unregisterHandler:function(a,b){var c;return D.handlers[a]&&(c=D.handlers[a].indexOf(b),c>-1&&D.handlers[a].splice(c,1)),l===j.EventBus.OPEN?B.unregisterHandler(a,b):void 0},send:function(a,b,c){return null==c&&(c=1e4),B.send(a,b,c)},publish:function(a,b){return B.publish(a,b)},getConnectionState:function(a){return(null!=j?j.EventBus:void 0)?o?a&&(l=j.readyState()):l=j.EventBus.CLOSED:l=3,l},isValidSession:function(){return C},login:function(a,b){return B.login(a,b).then(function(a){return C=!0,a})["catch"](function(a){return C=!1,a})}},D.registerHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.registerHandler",D.unregisterHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.unregisterHandler",D.send.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.send",D.publish.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.publish",D.getConnectionState.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.getConnectionState",D.isValidSession.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.isValidSession",D.login.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.login",k=function(){return D.getConnectionState(!0)},k.displayName=""+b.MODULE+"/"+b.COMPONENT+": periodic connection check",h(k,y),{on:D.registerHandler,addListener:D.registerHandler,un:D.unregisterHandler,removeListener:D.unregisterHandler,send:D.send,publish:D.publish,emit:D.publish,readyState:D.getConnectionState,isEnabled:function(){return o},getBufferCount:function(){return t.size()},isValidSession:function(){return C},login:D.login}}],this.$get.displayName=""+b.MODULE+"/"+b.COMPONENT+": Factory.get"})}).call(this); \ No newline at end of file +(function(){var a={}.hasOwnProperty;angular.module("knalli.angular-vertxbus",["ng"]),angular.module("knalli.angular-vertxbus").provider("vertxEventBus",function(){var a,b,c;a={MODULE:"angular-vertxbus",COMPONENT:"wrapper"},b={enabled:!0,debugEnabled:!1,prefix:"vertx-eventbus.",urlServer:""+location.protocol+"//"+location.hostname+":"+(location.port||80),urlPath:"/eventbus",reconnectEnabled:!0,sockjsStateInterval:1e4,sockjsReconnectInterval:1e4,sockjsOptions:{},messageBuffer:0},c=angular.extend({},b),this.enable=function(a){return null==a&&(a=b.enabled),c.enabled=a===!0,this},this.enable.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.enable",this.useDebug=function(a){return null==a&&(a=b.debugEnabled),c.debugEnabled=a===!0,this},this.useDebug.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useDebug",this.usePrefix=function(a){return null==a&&(a=b.prefix),c.prefix=a,this},this.usePrefix.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.usePrefix",this.useUrlServer=function(a){return null==a&&(a=b.urlServer),c.urlServer=a,this},this.useUrlServer.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useUrlServer",this.useUrlPath=function(a){return null==a&&(a=b.urlPath),c.urlPath=a,this},this.useUrlPath.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useUrlPath",this.useReconnect=function(a){return null==a&&(a=b.reconnectEnabled),c.reconnectEnabled=a,this},this.useReconnect.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useReconnect",this.useSockJsStateInterval=function(a){return null==a&&(a=b.sockjsStateInterval),c.sockjsStateInterval=a,this},this.useSockJsStateInterval.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsStateInterval",this.useSockJsReconnectInterval=function(a){return null==a&&(a=b.sockjsReconnectInterval),c.sockjsReconnectInterval=a,this},this.useSockJsReconnectInterval.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsReconnectInterval",this.useSockJsOptions=function(a){return null==a&&(a=b.sockjsOptions),c.sockjsOptions=a,this},this.useSockJsOptions.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useSockJsOptions",this.useMessageBuffer=function(a){return null==a&&(a=b.messageBuffer),c.messageBuffer=a,this},this.useMessageBuffer.displayName=""+a.MODULE+"/"+a.COMPONENT+": provider.useMessageBuffer",this.$get=["$timeout","$log",function(d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;return t=angular.extend({},b,c),j=t.enabled,i=t.debugEnabled,l=t.prefix,s=t.urlServer,r=t.urlPath,m=t.reconnectEnabled,p=t.sockjsStateInterval,o=t.sockjsReconnectInterval,n=t.sockjsOptions,g=null,f="undefined"!=typeof vertx&&null!==vertx?vertx.EventBus:void 0,j&&f?(q=""+s+r,i&&e.debug("[Vert.x EB Stub] Enabled: connecting '"+q+"'"),k=null,h=function(){k=new f(q,void 0,n),k.onopen=function(){i&&e.debug("[Vert.x EB Stub] Connected"),"function"==typeof g.onopen&&g.onopen()},k.onclose=function(){i&&e.debug("[Vert.x EB Stub] Reconnect in "+o+"ms"),"function"==typeof g.onclose&&g.onclose(),m&&d(h,o)}},h(),g={reconnect:function(){return k.close()},close:function(){return k.close()},login:function(a,b,c){return k.login(a,b,c)},send:function(a,b,c){return k.send(a,b,c)},publish:function(a,b){return k.publish(a,b)},registerHandler:function(b,c){var d;return k.registerHandler(b,c),d=function(){g.unregisterHandler(b,c)},d.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.registerHandler (deconstructor)",d},unregisterHandler:function(a,b){return k.unregisterHandler(a,b)},readyState:function(){return k.readyState()},EventBus:f,getOptions:function(){return angular.extend({},c)}},g.reconnect.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.reconnect",g.close.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.close",g.login.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.login",g.send.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.send",g.publish.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.publish",g.registerHandler.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.registerHandler",g.unregisterHandler.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.unregisterHandler",g.readyState.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.readyState",g.getOptions.displayName=""+a.MODULE+"/"+a.COMPONENT+": EventBusStub.getOptions"):i&&e.debug("[Vert.x EB Stub] Disabled"),g}],this.$get.displayName=""+a.MODULE+"/"+a.COMPONENT+": Factory.get"}),angular.module("knalli.angular-vertxbus").provider("vertxEventBusService",function(){var b,c,d,e,f;b={MODULE:"angular-vertxbus",COMPONENT:"service"},c={loginRequired:!1,loginBlockForSession:!1,skipUnauthorizeds:!0},d=function(){function a(a){this.maxSize=null!=a?a:10,this.items=[]}return a.prototype.push=function(a){return this.items.push(a),this.recalibrateBufferSize()},a.prototype.recalibrateBufferSize=function(){for(;this.items.length>this.maxSize;)this.first();return this},a.prototype.last=function(){return this.items.pop()},a.prototype.first=function(){return this.items.shift(0)},a.prototype.size=function(){return this.items.length},a}(),e=function(){function a(){this.keys=[],this.values=[]}return a.prototype.keys=null,a.prototype.values=null,a.prototype.put=function(a,b){var c;return c=this._indexForKey(a),c>-1?this.values[c]=b:(this.keys.push(a),this.values.push(b)),this},a.prototype.get=function(a){var b;return b=this._indexForKey(a),b>-1?this.values[b]:void 0},a.prototype.containsKey=function(a){var b;return b=this._indexForKey(a),b>-1},a.prototype.containsValue=function(a){var b;return b=this._indexForValue(a),b>-1},a.prototype.remove=function(a){var b;b=this._indexForKey(a),b>-1&&(this.keys[b]=void 0,this.values[b]=void 0)},a.prototype.clear=function(){return this.keys=[],this.values=[],this},a.prototype._indexForKey=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],a===c)return b;return-1},a.prototype._indexForValue=function(a){var b,c,d,e,f;for(f=this.values,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],a===c)return b;return-1},a}(),f=angular.extend({},c),this.requireLogin=function(a){return null==a&&(a=f.loginRequired),f.loginRequired=a,this},this.requireLogin.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.requireLogin",this.blockForSession=function(a){return null==a&&(a=f.loginBlockForSession),f.loginBlockForSession=a,this},this.blockForSession.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.blockForSession",this.skipUnauthorizeds=function(a){return null==a&&(a=f.skipUnauthorizeds),f.skipUnauthorizeds=a,this},this.skipUnauthorizeds.displayName=""+b.MODULE+"/"+b.COMPONENT+": provider.skipUnauthorizeds",this.$get=["$rootScope","$q","$interval","$timeout","vertxEventBus","$log",function(c,g,h,i,j,k){var l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G;return F=(null!=j?j.getOptions():void 0)||{},p=F.enabled,n=F.debugEnabled,v=F.prefix,B=F.urlServer,A=F.urlPath,w=F.reconnectEnabled,z=F.sockjsStateInterval,y=F.sockjsReconnectInterval,x=F.sockjsOptions,t=F.messageBuffer,m=null!=j&&null!=(G=j.EventBus)?G.CLOSED:void 0,D=!1,s=null,u=new d(t),o=new e,p&&j&&(j.onopen=function(){var b,d,e,f,g,h,i;E.getConnectionState(!0),c.$broadcast(""+v+"system.connected"),i=E.handlers;for(b in i)if(a.call(i,b))for(e=i[b],g=0,h=e.length;h>g;g++)d=e[g],C.registerHandler(b,d);if(c.$digest(),t&&u.size()){for(;u.size();)f=u.first(),"function"==typeof f&&f();c.$digest()}},j.onclose=function(){return E.getConnectionState(!0),c.$broadcast(""+v+"system.disconnected")},j.onclose.displayName=""+b.MODULE+"/"+b.COMPONENT+": 'onclose' handler"),r=function(a){return E.getConnectionState()===j.EventBus.OPEN?(a(),!0):t?(u.push(a),!0):!1},r.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenConnection",q=function(a){var c;return f.loginRequired?(c=function(){return D?(a(),!0):(n&&k.debug("[Vert.x EB Service] Message was not sent because login is required"),!1)},c.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenAuthConnection function wrapper",r(c)):r(a)},q.displayName=""+b.MODULE+"/"+b.COMPONENT+": ensureOpenAuthConnection",C={registerHandler:function(a,d){var e;if("function"==typeof d)return n&&k.debug("[Vert.x EB Service] Register handler for "+a),o.containsKey(d)?o.get(d):(e=function(a,b){d(a,b),c.$digest()},e.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.registerHandler (deconstructor)",o.put(d,e),j.registerHandler(a,o.get(d)))},unregisterHandler:function(a,b){"function"==typeof b&&(n&&k.debug("[Vert.x EB Service] Unregister handler for "+a),j.unregisterHandler(a,o.get(b)),o.remove(b))},send:function(a,c,d){var e,f,h;return null==d&&(d=1e4),e=g.defer(),h=function(){return j.send(a,c,function(a){return e?e.resolve(a):void 0}),e?i(function(){return e.reject()},d):void 0},h.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.send (ensureOpenAuthConnection callback)",f=q(h),e&&!f&&e.reject(),null!=e?e.promise:void 0},publish:function(a,c){var d,e;return e=function(){return j.publish(a,c)},e.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.publish (ensureOpenAuthConnection callback)",d=q(e)},login:function(a,d,e){var f,h;return null==e&&(e=5e3),f=g.defer(),h=function(a){return"ok"===(null!=a?a.status:void 0)?(f.resolve(a),c.$broadcast(""+v+"system.login.succeeded",{status:null!=a?a.status:void 0})):(f.reject(a),c.$broadcast(""+v+"system.login.failed",{status:null!=a?a.status:void 0}))},h.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.login (callback)",j.login(a,d,h),i(function(){return f.reject()},e),f.promise}},C.registerHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.registerHandler",C.unregisterHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.unregisterHandler",C.send.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.send",C.publish.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.publish",C.login.displayName=""+b.MODULE+"/"+b.COMPONENT+": util.login",E={handlers:{},registerHandler:function(a,c){var d,e;return E.handlers[a]||(E.handlers[a]=[]),E.handlers[a].push(c),e=null,m===j.EventBus.OPEN&&(e=C.registerHandler(a,c)),d=function(){var b;e&&e(),E.handlers[a]&&(b=E.handlers[a].indexOf(c),b>-1&&E.handlers[a].splice(b,1)),E.handlers[a].length<1&&(E.handlers[a]=void 0)},d.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.registerHandler (deconstructor)",d},unregisterHandler:function(a,b){var c;return E.handlers[a]&&(c=E.handlers[a].indexOf(b),c>-1&&E.handlers[a].splice(c,1)),E.handlers[a].length<1&&(E.handlers[a]=void 0),m===j.EventBus.OPEN?C.unregisterHandler(a,b):void 0},send:function(a,b,c){return null==c&&(c=1e4),C.send(a,b,c)},publish:function(a,b){return C.publish(a,b)},getConnectionState:function(a){return(null!=j?j.EventBus:void 0)?p?a&&(m=j.readyState()):m=j.EventBus.CLOSED:m=3,m},isValidSession:function(){return D},login:function(a,b){return C.login(a,b).then(function(a){return D=!0,a})["catch"](function(a){return D=!1,a})}},E.registerHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.registerHandler",E.unregisterHandler.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.unregisterHandler",E.send.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.send",E.publish.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.publish",E.getConnectionState.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.getConnectionState",E.isValidSession.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.isValidSession",E.login.displayName=""+b.MODULE+"/"+b.COMPONENT+": wrapped.login",l=function(){return E.getConnectionState(!0)},l.displayName=""+b.MODULE+"/"+b.COMPONENT+": periodic connection check",h(l,z),{on:E.registerHandler,addListener:E.registerHandler,un:E.unregisterHandler,removeListener:E.unregisterHandler,send:E.send,publish:E.publish,emit:E.publish,readyState:E.getConnectionState,isEnabled:function(){return p},getBufferCount:function(){return u.size()},isValidSession:function(){return D},login:E.login}}],this.$get.displayName=""+b.MODULE+"/"+b.COMPONENT+": Factory.get"})}).call(this); \ No newline at end of file diff --git a/dist/requirejs/angular-vertxbus.js b/dist/requirejs/angular-vertxbus.js index 05a8631..78c756a 100644 --- a/dist/requirejs/angular-vertxbus.js +++ b/dist/requirejs/angular-vertxbus.js @@ -1,4 +1,4 @@ -/*! angular-vertxbus - v0.10.0 - 2014-12-14 +/*! angular-vertxbus - v0.11.0 - 2014-12-18 * http://github.com/knalli/angular-vertxbus * Copyright (c) 2014 ; Licensed */ define(['angular', 'vertxbus'], function(angular) { @@ -141,7 +141,7 @@ define(['angular', 'vertxbus'], function(angular) { Furthermore, the stub supports theses extra APIs: - recconnect() */ - this.$get = ['$timeout', function($timeout) { + this.$get = ['$timeout', '$log', function($timeout, $log) { var EventBusOriginal, EventBusStub, connect, debugEnabled, enabled, eventBus, prefix, reconnectEnabled, sockjsOptions, sockjsReconnectInterval, sockjsStateInterval, url, urlPath, urlServer, _ref; _ref = angular.extend({}, DEFAULT_OPTIONS, options), enabled = _ref.enabled, debugEnabled = _ref.debugEnabled, prefix = _ref.prefix, urlServer = _ref.urlServer, urlPath = _ref.urlPath, reconnectEnabled = _ref.reconnectEnabled, sockjsStateInterval = _ref.sockjsStateInterval, sockjsReconnectInterval = _ref.sockjsReconnectInterval, sockjsOptions = _ref.sockjsOptions; EventBusStub = null; @@ -149,14 +149,14 @@ define(['angular', 'vertxbus'], function(angular) { if (enabled && EventBusOriginal) { url = "" + urlServer + urlPath; if (debugEnabled) { - console.debug("[Vert.x EB Stub] Enabled: connecting '" + url + "'"); + $log.debug("[Vert.x EB Stub] Enabled: connecting '" + url + "'"); } eventBus = null; connect = function() { eventBus = new EventBusOriginal(url, void 0, sockjsOptions); eventBus.onopen = function() { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Connected"); + $log.debug("[Vert.x EB Stub] Connected"); } if (typeof EventBusStub.onopen === 'function') { EventBusStub.onopen(); @@ -164,7 +164,7 @@ define(['angular', 'vertxbus'], function(angular) { }; eventBus.onclose = function() { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Reconnect in " + sockjsReconnectInterval + "ms"); + $log.debug("[Vert.x EB Stub] Reconnect in " + sockjsReconnectInterval + "ms"); } if (typeof EventBusStub.onclose === 'function') { EventBusStub.onclose(); @@ -226,7 +226,7 @@ define(['angular', 'vertxbus'], function(angular) { EventBusStub.getOptions.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": EventBusStub.getOptions"; } else { if (debugEnabled) { - console.debug("[Vert.x EB Stub] Disabled"); + $log.debug("[Vert.x EB Stub] Disabled"); } } return EventBusStub; @@ -421,7 +421,7 @@ define(['angular', 'vertxbus'], function(angular) { return this; }; this.skipUnauthorizeds.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": provider.skipUnauthorizeds"; - this.$get = ['$rootScope', '$q', '$interval', '$timeout', 'vertxEventBus', function($rootScope, $q, $interval, $timeout, vertxEventBus) { + this.$get = ['$rootScope', '$q', '$interval', '$timeout', 'vertxEventBus', '$log', function($rootScope, $q, $interval, $timeout, vertxEventBus, $log) { var connectionIntervalCheck, connectionState, debugEnabled, deconstructors, enabled, ensureOpenAuthConnection, ensureOpenConnection, loginPromise, messageBuffer, messageQueue, prefix, reconnectEnabled, sockjsOptions, sockjsReconnectInterval, sockjsStateInterval, urlPath, urlServer, util, validSession, wrapped, _ref, _ref1; _ref = (vertxEventBus != null ? vertxEventBus.getOptions() : void 0) || {}, enabled = _ref.enabled, debugEnabled = _ref.debugEnabled, prefix = _ref.prefix, urlServer = _ref.urlServer, urlPath = _ref.urlPath, reconnectEnabled = _ref.reconnectEnabled, sockjsStateInterval = _ref.sockjsStateInterval, sockjsReconnectInterval = _ref.sockjsReconnectInterval, sockjsOptions = _ref.sockjsOptions, messageBuffer = _ref.messageBuffer; connectionState = vertxEventBus != null ? (_ref1 = vertxEventBus.EventBus) != null ? _ref1.CLOSED : void 0 : void 0; @@ -482,7 +482,7 @@ define(['angular', 'vertxbus'], function(angular) { return true; } else { if (debugEnabled) { - console.debug("[Vert.x EB Service] Message was not sent because login is required"); + $log.debug("[Vert.x EB Service] Message was not sent because login is required"); } return false; } @@ -499,7 +499,7 @@ define(['angular', 'vertxbus'], function(angular) { return; } if (debugEnabled) { - console.debug("[Vert.x EB Service] Register handler for " + address); + $log.debug("[Vert.x EB Service] Register handler for " + address); } if (deconstructors.containsKey(callback)) { return deconstructors.get(callback); @@ -517,7 +517,7 @@ define(['angular', 'vertxbus'], function(angular) { return; } if (debugEnabled) { - console.debug("[Vert.x EB Service] Unregister handler for " + address); + $log.debug("[Vert.x EB Service] Unregister handler for " + address); } vertxEventBus.unregisterHandler(address, deconstructors.get(callback)); deconstructors.remove(callback); @@ -613,6 +613,9 @@ define(['angular', 'vertxbus'], function(angular) { wrapped.handlers[address].splice(index, 1); } } + if (wrapped.handlers[address].length < 1) { + wrapped.handlers[address] = void 0; + } }; deconstructor.displayName = "" + CONSTANTS.MODULE + "/" + CONSTANTS.COMPONENT + ": wrapped.registerHandler (deconstructor)"; return deconstructor; @@ -625,6 +628,9 @@ define(['angular', 'vertxbus'], function(angular) { wrapped.handlers[address].splice(index, 1); } } + if (wrapped.handlers[address].length < 1) { + wrapped.handlers[address] = void 0; + } if (connectionState === vertxEventBus.EventBus.OPEN) { return util.unregisterHandler(address, callback); }