summaryrefslogtreecommitdiffstats
path: root/priv
diff options
context:
space:
mode:
authorDave Peticolas <[email protected]>2013-04-08 20:01:54 -0700
committerDave Peticolas <[email protected]>2013-04-08 20:01:54 -0700
commit954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb (patch)
tree5a8c00c49cbb0cf5c360cd97954b5bc7b2ec5e99 /priv
parentd2f9805b0d668e5b76ca63cd1b47b8a205ba09e1 (diff)
downloadbullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.tar.gz
bullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.tar.bz2
bullet-954b4f29ee7c6edddaa462041d6a8d45cf5ba7bb.zip
Support EventSource as a transport.
Diffstat (limited to 'priv')
-rw-r--r--priv/bullet.js53
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;