diff options
author | Dave Peticolas <[email protected]> | 2013-04-08 20:01:54 -0700 |
---|---|---|
committer | Dave Peticolas <[email protected]> | 2013-04-08 20:01:54 -0700 |
commit | 954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb (patch) | |
tree | 5a8c00c49cbb0cf5c360cd97954b5bc7b2ec5e99 /priv | |
parent | d2f9805b0d668e5b76ca63cd1b47b8a205ba09e1 (diff) | |
download | bullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.tar.gz bullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.tar.bz2 bullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.zip |
Support EventSource as a transport.
Diffstat (limited to 'priv')
-rw-r--r-- | priv/bullet.js | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/priv/bullet.js b/priv/bullet.js index f1b22ba..19d294d 100644 --- a/priv/bullet.js +++ b/priv/bullet.js @@ -32,7 +32,7 @@ onheartbeat is called once every few seconds to allow you to easily setup a ping/pong mechanism. */ -(function($){$.extend({bullet: function(url){ +(function($){$.extend({bullet: function(url, options){ var CONNECTING = 0; var OPEN = 1; var CLOSING = 2; @@ -47,6 +47,10 @@ websocket: function(){ var ret = false; + if (options !== undefined && options.disableWebSocket) { + return false; + } + if (window.WebSocket){ ret = window.WebSocket; } @@ -63,7 +67,54 @@ return false; }, + eventsource: function(){ + if (options !== undefined && options.disableEventSource) { + return false; + } + + if (!window.EventSource){ + return false; + } + + var eventsourceURL = url.replace('ws:', 'http:').replace('wss:', 'https:'); + var source = new window.EventSource(eventsourceURL); + + source.onopen = function () { + fake.readyState = OPEN; + fake.onopen(); + }; + + source.onmessage = function (event) { + fake.onmessage(event); + }; + + source.onerror = function () { + source.close(); // bullet will handle reconnects + source = undefined; + fake.onerror(); + }; + + var fake = { + readyState: CONNECTING, + send: function(data){ + return false; // fallback to another method instead? + }, + close: function(){ + fake.readyState = CLOSED; + source.close(); + source = undefined; + fake.onclose(); + } + }; + + return {'heart': false, 'transport': function(){ return fake; }}; + }, + xhrPolling: function(){ + if (options !== undefined && options.disableXHRPolling) { + return false; + } + var timeout; var xhr; |