From d72179bf3ec89517906a2a77821d7fd7cf619075 Mon Sep 17 00:00:00 2001 From: Sam Eubank Date: Fri, 13 Jun 2014 13:48:48 -0700 Subject: [PATCH] Prevent duplicate poll calls --- beams-client.js | 22 +++++++++++----------- beams-client.min.js | 2 +- package.json | 2 +- scripts/beams-jymin.js | 12 ++++++------ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/beams-client.js b/beams-client.js index 78d9e64..c4814ea 100644 --- a/beams-client.js +++ b/beams-client.js @@ -1,9 +1,9 @@ /** - * ____ ____ _ _ _ ___ ___ _ ___ - * | __ ) ___ __ _ _ __ ___ ___ / ___| (_) ___ _ __ | |_ __ __/ _ \ / _ \ / |/ _ \ - * | _ \ / _ \/ _` | '_ ` _ \/ __| | | | | |/ _ \ '_ \| __| \ \ / / | | | | | || | | | | - * | |_) | __/ (_| | | | | | \__ \ | |___| | | __/ | | | |_ \ V /| |_| | |_| || | |_| | - * |____/ \___|\__,_|_| |_| |_|___/ \____|_|_|\___|_| |_|\__| \_/ \___(_)___(_)_|\___/ + * ____ ____ _ _ _ ___ ___ _ _ + * | __ ) ___ __ _ _ __ ___ ___ / ___| (_) ___ _ __ | |_ __ __/ _ \ / _ \ / / | + * | _ \ / _ \/ _` | '_ ` _ \/ __| | | | | |/ _ \ '_ \| __| \ \ / / | | | | | || | | + * | |_) | __/ (_| | | | | | \__ \ | |___| | | __/ | | | |_ \ V /| |_| | |_| || | | + * |____/ \___|\__,_|_| |_| |_|___/ \____|_|_|\___|_| |_|\__| \_/ \___(_)___(_)_|_| * * * http://lighter.io/beams @@ -368,7 +368,7 @@ var Beams = function () { }; client._ON = client.on = function (name, callback) { - var list = callbacks[name] + var list = callbacks[name]; if (!list) { list = callbacks[name] = []; } @@ -413,21 +413,21 @@ var Beams = function () { trigger(name, data); }); // Poll again. - poll(); + addTimeout(Beams, poll, 0); }, function (response) { - log('ERROR: Failed to connect (' + endpointUrl + ').'); + error('Beams: Failed to connect (' + endpointUrl + ').'); // Try again later. - setTimeout(poll, BEAMS_RETRY_TIMEOUT); + addTimeout(Beams, poll, BEAMS_RETRY_TIMEOUT); }, 1); - }; + } // Trigger any related callbacks with received data. function trigger(name, data) { forEach(callbacks[name], function (callback) { callback.call(client, data); }); - }; + } // When a client connects, set the client id. client._CONNECT(function (data) { diff --git a/beams-client.min.js b/beams-client.min.js index d47050c..602debe 100644 --- a/beams-client.min.js +++ b/beams-client.min.js @@ -1 +1 @@ -!function(n){var t=function(){},e=t,r=t,i=function(t,o,u,c,a){isFunction(o)&&(a=c,c=u,u=o,o=0);var f;if(n.XMLHttpRequest)f=new XMLHttpRequest;else{if(!n.ActiveXObject)return!1;f=new ActiveXObject("Microsoft.XMLHTTP")}return f&&(f.onreadystatechange=function(){if(4==f.readyState){--i._WAITING;var t=f.status,o=200==t,T=o?u||e:c||r,v=f.responseText;if(a){var _;if(t)try{var l=n.eval;l("eval.J="+v),_=l.J}catch(l){s('Could not parse JSON: "'+v+'"'),_={_ERROR:"_BAD_JSON",_TEXT:v}}else _={_ERROR:"_OFFLINE"};_._STATUS=t,_.request=f,v=_}T(v,f)}},f.open(o?"POST":"GET",t,!0),f.setRequestHeader("x-requested-with","XMLHttpRequest"),o&&f.setRequestHeader("content-type","application/x-www-form-urlencoded"),i._WAITING=(i._WAITING||0)+1,f.url=t,o&&(f.body=o),f._TIME=new Date,f.send(o||null)),!0},o=function(n,t){if(n)for(var e=0,r=a(n);r>e;e++){var i=t(n[e],e,n);if(i===!1)break}},u=function(n,t){if(n)for(var e in n){var r=t(n[e],e,n);if(r===!1)break}},c=function(n,t){return n&&t&&u(t,function(t,e){n[e]=t}),n},a=function(n){return isInstance(n)||isString(n)?n.length:0},f=function(n,t){return isArray(n)&&n.push(t),t},s=function(){v("error",arguments)},T=function(){v("log",arguments)},v=function(t,e){var r=n.console;r&&r[t]&&r[t].apply(r,e)},_=1e3,l=function(){function n(){i(a,0,function(t){o(t,function(n){var t=n[0],r=n[1];e(t,r)}),n()},function(){T("ERROR: Failed to connect ("+a+")."),setTimeout(n,_)},1)}function e(n,t){o(v[n],function(n){n.call(r,t)})}var r=l._CLIENT;if(r)return r;var u="/beam",a=u,s=[],v={},d=!1;onReady(function(){d&&(v={}),d=!0});var R=0;return r=l._CLIENT={},r._CONNECT=r.connect=function(n){return this._ON("connect",n),r},r._ON=r.on=function(n,t){var e=v[n];return e||(e=v[n]=[]),f(e,t),r},r._EMIT=r.emit=function(n,e){function o(){i(a+"&m="+escape(n)+"&n="+R,e||{},t,function(){setTimeout(o,_)})}return R++,r.id?o():s.push(o),r},r._CONNECT(function(n){c(r,n),a=u+"?id="+r.id,s.forEach(function(n){n()}),s=[]}),n(),r};n.Beams=l}(window); \ No newline at end of file +!function(n){var t=function(){},e=t,i=t,r=function(t,o,u,c,a){isFunction(o)&&(a=c,c=u,u=o,o=0);var f;if(n.XMLHttpRequest)f=new XMLHttpRequest;else{if(!n.ActiveXObject)return!1;f=new ActiveXObject("Microsoft.XMLHTTP")}return f&&(f.onreadystatechange=function(){if(4==f.readyState){--r._WAITING;var t=f.status,o=200==t,T=o?u||e:c||i,d=f.responseText;if(a){var v;if(t)try{var _=n.eval;_("eval.J="+d),v=_.J}catch(_){s('Could not parse JSON: "'+d+'"'),v={_ERROR:"_BAD_JSON",_TEXT:d}}else v={_ERROR:"_OFFLINE"};v._STATUS=t,v.request=f,d=v}T(d,f)}},f.open(o?"POST":"GET",t,!0),f.setRequestHeader("x-requested-with","XMLHttpRequest"),o&&f.setRequestHeader("content-type","application/x-www-form-urlencoded"),r._WAITING=(r._WAITING||0)+1,f.url=t,o&&(f.body=o),f._TIME=new Date,f.send(o||null)),!0},o=function(n,t){if(n)for(var e=0,i=a(n);i>e;e++){var r=t(n[e],e,n);if(r===!1)break}},u=function(n,t){if(n)for(var e in n){var i=t(n[e],e,n);if(i===!1)break}},c=function(n,t){return n&&t&&u(t,function(t,e){n[e]=t}),n},a=function(n){return isInstance(n)||isString(n)?n.length:0},f=function(n,t){return isArray(n)&&n.push(t),t},s=function(){T("error",arguments)},T=function(t,e){var i=n.console;i&&i[t]&&i[t].apply(i,e)},d=1e3,v=function(){function n(){r(a,0,function(t){o(t,function(n){var t=n[0],i=n[1];e(t,i)}),addTimeout(v,n,0)},function(){s("Beams: Failed to connect ("+a+")."),addTimeout(v,n,d)},1)}function e(n,t){o(_[n],function(n){n.call(i,t)})}var i=v._CLIENT;if(i)return i;var u="/beam",a=u,T=[],_={},l=!1;onReady(function(){l&&(_={}),l=!0});var p=0;return i=v._CLIENT={},i._CONNECT=i.connect=function(n){return this._ON("connect",n),i},i._ON=i.on=function(n,t){var e=_[n];return e||(e=_[n]=[]),f(e,t),i},i._EMIT=i.emit=function(n,e){function o(){r(a+"&m="+escape(n)+"&n="+p,e||{},t,function(){setTimeout(o,d)})}return p++,i.id?o():T.push(o),i},i._CONNECT(function(n){c(i,n),a=u+"?id="+i.id,T.forEach(function(n){n()}),T=[]}),n(),i};n.Beams=v}(window); \ No newline at end of file diff --git a/package.json b/package.json index 4c61ad9..781b306 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "socket", "io" ], - "version": "0.0.10", + "version": "0.0.11", "main": "beams.js", "homepage": "http://lighter.io/beams", "repository": "git://github.com/zerious/beams.git", diff --git a/scripts/beams-jymin.js b/scripts/beams-jymin.js index 80abcd3..2fefe80 100644 --- a/scripts/beams-jymin.js +++ b/scripts/beams-jymin.js @@ -47,7 +47,7 @@ var Beams = function () { }; client._ON = client.on = function (name, callback) { - var list = callbacks[name] + var list = callbacks[name]; if (!list) { list = callbacks[name] = []; } @@ -92,21 +92,21 @@ var Beams = function () { trigger(name, data); }); // Poll again. - poll(); + addTimeout(Beams, poll, 0); }, function (response) { - log('ERROR: Failed to connect (' + endpointUrl + ').'); + error('Beams: Failed to connect (' + endpointUrl + ').'); // Try again later. - setTimeout(poll, BEAMS_RETRY_TIMEOUT); + addTimeout(Beams, poll, BEAMS_RETRY_TIMEOUT); }, 1); - }; + } // Trigger any related callbacks with received data. function trigger(name, data) { forEach(callbacks[name], function (callback) { callback.call(client, data); }); - }; + } // When a client connects, set the client id. client._CONNECT(function (data) {