From 9c0d6fca4ae6198500522508f43dbac156b2a1cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20de=20Bondt?= Date: Tue, 14 Jun 2016 13:03:11 +0200 Subject: [PATCH 1/2] Added a function to extend the options used in the initial connection Synced src/ and release/ .js files --- release/angular-wamp.js | 15 +++++++++++++++ release/angular-wamp.min.js | 2 +- src/angular-wamp.js | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/release/angular-wamp.js b/release/angular-wamp.js index f87019d..d944ab6 100644 --- a/release/angular-wamp.js +++ b/release/angular-wamp.js @@ -384,12 +384,27 @@ if (typeof module !== "undefined" && typeof exports !== "undefined" && module.ex connection.open(); } }, + + //Add or update initial options. Does not delete! + setOptions: function(updatedOptions, closeOld, openNew) { + if (closeOld && connection.isOpen) { + connection.close(); + } + + angular.extend(options, updatedOptions); + + if (openNew) { + connection.open(); + } + }, + setAuthId: function (authid, open) { options.authid = authid; if (open) { connection.open(); } }, + close: function () { connection.close(); }, diff --git a/release/angular-wamp.min.js b/release/angular-wamp.min.js index 230fab8..9b073ea 100644 --- a/release/angular-wamp.min.js +++ b/release/angular-wamp.min.js @@ -1 +1 @@ -if("undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports){var autobahn=require("autobahn");module.exports="vxWamp"}!function(){"use strict";function b(){var a;this.init=function(b){a=b||{}};var b=this.interceptors=[];return this.$get=["$rootScope","$q","$log","$injector",function(c,d,e,f){function n(b){return a.disable_digest&&a.disable_digest===!0?b:function(){var a=b.apply(this,arguments);return c.$applyAsync(),a}}var g,h=d.defer(),i=h.promise,j=a.prefix||"$wamp",k=function(a,b,e){var f=d.defer();return c.$broadcast(j+".onchallenge",{promise:f,session:a,method:b,extra:e}),f.promise},l={onchallenge:n(k),use_deferred:d.defer};a=angular.extend(l,a);var m=[];angular.forEach(b,function(a){m.unshift(angular.isString(a)?f.get(a):f.invoke(a))}),g=new autobahn.Connection(a),g.onopen=n(function(a,b){e.debug("Congrats! You're connected to the WAMP server!"),c.$broadcast(j+".open",{session:a,details:b}),h.resolve()}),g.onclose=n(function(a,b){e.debug("Connection Closed: ",a,b);for(var d in g.session._call_reqs)if(g.session._call_reqs.hasOwnProperty(d)){var f=new Error("Connection Closed"),h=g.session._call_reqs[d];h[0].reject(f)}c.$broadcast(j+".close",{reason:a,details:b})});var o=function(a,b,e,f){var i,k,h={},l=d.defer();return b=n(b),k=function(){var c=g.session.subscribe(a,b,e).then(function(a){return h.hasOwnProperty("id")&&delete h.id,h=angular.extend(a,h),l.resolve(h),a});f&&f(c)},g.isOpen&&k(),i=c.$on(j+".open",k),h.promise=l.promise,h.unsubscribe=function(){return i(),g.session.unsubscribe(h)},h.promise},p=function(a,b,c){var f=function(c){return{result:c,type:a,args:b}},g=function(c){return e.error(j+" error",{type:a,arguments:b,error:c}),d.reject({error:c,type:a,args:b})},h=i.then(function(){return c()}),k=[f,g];for(angular.forEach(m,function(b){(b[a+"Response"]||b[a+"ResponseError"])&&k.push(b[a+"Response"],b[a+"ResponseError"])}),k.push(function(a){return a.result},function(a){return d.reject(a.error)});k.length;){var l=k.shift(),n=k.shift();h=h.then(l,n)}return h};return{connection:g,open:function(){a.authmethods&&-1!==a.authmethods.indexOf("wampcra")&&!a.authid?e.debug("You're using WAMP CRA. The authid must be set on $wamp before the connection can be opened, ie: $wamp.setAuthId('john.doe')"):g.open()},setAuthId:function(b,c){a.authid=b,c&&g.open()},close:function(){g.close()},subscribe:function(a,b,c,d){return p("subscribe",arguments,function(){return o(a,b,c,d)})},subscribeOnScope:function(a,b,c){return this.subscribe(b,c).then(function(b){return a.$on("$destroy",function(){return b.unsubscribe()}),b})},unsubscribe:function(a){return p("unsubscribe",arguments,function(){return a.unsubscribe()})},publish:function(a,b,c,d){return p("publish",arguments,function(){return g.session.publish(a,b,c,d)})},register:function(a,b,c){return b=n(b),p("register",arguments,function(){return g.session.register(a,b,c)})},unregister:function(a){return p("unregister",arguments,function(){return a.unregister()})},call:function(a,b,c,d){return p("call",arguments,function(){return g.session.call(a,b,c,d)})}}}],this}angular.module("vxWamp",[]).provider("$wamp",b)}(); \ No newline at end of file +if("undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports){var autobahn=require("autobahn");module.exports="vxWamp"}!function(){"use strict";function a(){var a;this.init=function(b){a=b||{}};var b=this.interceptors=[];return this.$get=["$rootScope","$q","$log","$injector",function(c,d,e,f){function g(b){return a.disable_digest&&a.disable_digest===!0?b:function(){var a=b.apply(this,arguments);return c.$applyAsync(),a}}var h,i=d.defer(),j=i.promise,k=a.prefix||"$wamp",l=function(a,b,e){var f=d.defer();return c.$broadcast(k+".onchallenge",{promise:f,session:a,method:b,extra:e}),f.promise},m={onchallenge:g(l),use_deferred:d.defer};a=angular.extend(m,a);var n=[];angular.forEach(b,function(a){n.unshift(angular.isString(a)?f.get(a):f.invoke(a))}),h=new autobahn.Connection(a),h.onopen=g(function(a,b){e.debug("Congrats! You're connected to the WAMP server!"),c.$broadcast(k+".open",{session:a,details:b}),i.resolve()}),h.onclose=g(function(a,b){e.debug("Connection Closed: ",a,b);for(var d in h.session._call_reqs)if(h.session._call_reqs.hasOwnProperty(d)){var f=new Error("Connection Closed"),g=h.session._call_reqs[d];g[0].reject(f)}c.$broadcast(k+".close",{reason:a,details:b})});var o=function(a,b,e,f){var i,j,l={},m=d.defer();return b=g(b),j=function(){var c=h.session.subscribe(a,b,e).then(function(a){return l.hasOwnProperty("id")&&delete l.id,l=angular.extend(a,l),m.resolve(l),a});f&&f(c)},h.isOpen&&j(),i=c.$on(k+".open",j),l.promise=m.promise,l.unsubscribe=function(){return i(),h.session.unsubscribe(l)},l.promise},p=function(a,b,c){var f=function(c){return{result:c,type:a,args:b}},g=function(c){return e.error(k+" error",{type:a,arguments:b,error:c}),d.reject({error:c,type:a,args:b})},h=j.then(function(){return c()}),i=[f,g];for(angular.forEach(n,function(b){(b[a+"Response"]||b[a+"ResponseError"])&&i.push(b[a+"Response"],b[a+"ResponseError"])}),i.push(function(a){return a.result},function(a){return d.reject(a.error)});i.length;){var l=i.shift(),m=i.shift();h=h.then(l,m)}return h};return{connection:h,open:function(){a.authmethods&&-1!==a.authmethods.indexOf("wampcra")&&!a.authid?e.debug("You're using WAMP CRA. The authid must be set on $wamp before the connection can be opened, ie: $wamp.setAuthId('john.doe')"):h.open()},setOptions:function(b,c,d){c&&h.isOpen&&h.close(),angular.extend(a,b),d&&h.open()},setAuthId:function(b,c){a.authid=b,c&&h.open()},close:function(){h.close()},subscribe:function(a,b,c,d){return p("subscribe",arguments,function(){return o(a,b,c,d)})},subscribeOnScope:function(a,b,c){return this.subscribe(b,c).then(function(b){return a.$on("$destroy",function(){return b.unsubscribe()}),b})},unsubscribe:function(a){return p("unsubscribe",arguments,function(){return a.unsubscribe()})},publish:function(a,b,c,d){return p("publish",arguments,function(){return h.session.publish(a,b,c,d)})},register:function(a,b,c){return b=g(b),p("register",arguments,function(){return h.session.register(a,b,c)})},unregister:function(a){return p("unregister",arguments,function(){return a.unregister()})},call:function(a,b,c,d){return p("call",arguments,function(){return h.session.call(a,b,c,d)})}}}],this}angular.module("vxWamp",[]).provider("$wamp",a)}(); \ No newline at end of file diff --git a/src/angular-wamp.js b/src/angular-wamp.js index 944e77f..d944ab6 100644 --- a/src/angular-wamp.js +++ b/src/angular-wamp.js @@ -93,7 +93,7 @@ if (typeof module !== "undefined" && typeof exports !== "undefined" && module.ex **/ var interceptors = this.interceptors = []; - this.$get = function ($rootScope, $q, $log, $injector) { + this.$get = ["$rootScope", "$q", "$log", "$injector", function ($rootScope, $q, $log, $injector) { /** * @ngdoc service @@ -384,12 +384,27 @@ if (typeof module !== "undefined" && typeof exports !== "undefined" && module.ex connection.open(); } }, + + //Add or update initial options. Does not delete! + setOptions: function(updatedOptions, closeOld, openNew) { + if (closeOld && connection.isOpen) { + connection.close(); + } + + angular.extend(options, updatedOptions); + + if (openNew) { + connection.open(); + } + }, + setAuthId: function (authid, open) { options.authid = authid; if (open) { connection.open(); } }, + close: function () { connection.close(); }, @@ -434,7 +449,7 @@ if (typeof module !== "undefined" && typeof exports !== "undefined" && module.ex }); } }; - }; + }]; return this; From 7a86c0a7d7db598806b3e7a52c0dbd4f20075694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20de=20Bondt?= Date: Mon, 20 Jun 2016 16:05:43 +0200 Subject: [PATCH 2/2] autobahn v 0.10+ works with IE now See: https://github.com/crossbario/autobahn-js/issues/199 closed --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a62c921..1dc7cb4 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "angular": "^1.3.0", - "autobahn": "0.9.9" + "autobahn": ">= 0.9.5" }, "license": "MIT", "devDependencies": {