diff options
author | Loïc Hoguin <[email protected]> | 2013-06-29 19:17:42 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2013-06-29 19:17:42 +0200 |
commit | 458884c543a99f7c09438fd5989bec0802b42976 (patch) | |
tree | 9b8c359ab3c8109daa3c00af123fe6cc09a5792c /priv | |
parent | 22c1d0a47b1ca8abb841fcb33d5ed115eeb0ae8b (diff) | |
parent | 95366273731c5b05927053bc781624ebb06b1cb7 (diff) | |
download | bullet-458884c543a99f7c09438fd5989bec0802b42976.tar.gz bullet-458884c543a99f7c09438fd5989bec0802b42976.tar.bz2 bullet-458884c543a99f7c09438fd5989bec0802b42976.zip |
Merge branch 'eventsource-xhr-send' of git://github.com/jdavisp3/bullet
Diffstat (limited to 'priv')
-rw-r--r-- | priv/bullet.js | 77 |
1 files changed, 43 insertions, 34 deletions
diff --git a/priv/bullet.js b/priv/bullet.js index 50686f6..e43fe75 100644 --- a/priv/bullet.js +++ b/priv/bullet.js @@ -38,6 +38,36 @@ var CLOSING = 2; var CLOSED = 3; + var xhrSend = function(data){ + /** + Send a message using ajax. Used for both the + eventsource and xhrPolling transports. + */ + if (this.readyState != CONNECTING && this.readyState != OPEN){ + return false; + } + + var sendUrl = url.replace('ws:', 'http:').replace('wss:', 'https:'); + + $.ajax({ + async: false, + cache: false, + type: 'POST', + url: sendUrl, + data: data, + dataType: 'text', + contentType: 'application/x-www-form-urlencoded; charset=utf-8', + headers: {'X-Socket-Transport': 'xhrPolling'}, + success: function(data){ + if (data.length !== 0){ + fake.onmessage({'data': data}); + } + } + }); + + return true; + }; + var transports = { /** The websocket transport is disabled for Firefox 6.0 because it @@ -96,9 +126,7 @@ var fake = { readyState: CONNECTING, - send: function(data){ - return false; // fallback to another method instead? - }, + send: xhrSend, close: function(){ fake.readyState = CLOSED; source.close(); @@ -116,39 +144,17 @@ } var timeout; - var xhr; + var xhr = null; var fake = { readyState: CONNECTING, - send: function(data){ - if (this.readyState != CONNECTING && this.readyState != OPEN){ - return false; - } - - var fakeurl = url.replace('ws:', 'http:').replace('wss:', 'https:'); - - $.ajax({ - async: false, - cache: false, - type: 'POST', - url: fakeurl, - data: data, - dataType: 'text', - contentType: - 'application/x-www-form-urlencoded; charset=utf-8', - headers: {'X-Socket-Transport': 'xhrPolling'}, - success: function(data){ - if (data.length != 0){ - fake.onmessage({'data': data}); - } - } - }); - - return true; - }, + send: xhrSend, close: function(){ this.readyState = CLOSED; - xhr.abort(); + if (xhr){ + xhr.abort(); + xhr = null; + } clearTimeout(timeout); fake.onclose(); }, @@ -169,12 +175,13 @@ data: {}, headers: {'X-Socket-Transport': 'xhrPolling'}, success: function(data){ + xhr = null; if (fake.readyState == CONNECTING){ fake.readyState = OPEN; fake.onopen(fake); } // Connection might have closed without a response body - if (data.length != 0){ + if (data.length !== 0){ fake.onmessage({'data': data}); } if (fake.readyState == OPEN){ @@ -182,6 +189,7 @@ } }, error: function(xhr){ + xhr = null; fake.onerror(); } }); @@ -257,8 +265,9 @@ }; transport.onclose = function(){ // Firefox 13.0.1 sends 2 close events. - // Return directly if we already handled it. - if (isClosed){ + // Return directly if we already handled it + // or we are closed + if (isClosed || readyState == CLOSED){ return; } |