start experimenting with a fallback layer

This commit is contained in:
Calvin Montgomery 2013-06-03 23:56:06 -04:00
parent 70f2065a36
commit 9eafc53c91
6 changed files with 226 additions and 0 deletions

View file

@ -835,6 +835,7 @@ Callbacks = {
}
}
/*
$.getScript(IO_URL+"/socket.io/socket.io.js", function() {
try {
socket = io.connect(IO_URL);
@ -846,3 +847,9 @@ $.getScript(IO_URL+"/socket.io/socket.io.js", function() {
Callbacks.disconnect();
}
});
*/
socket = new NotWebsocket();
for(var key in Callbacks) {
socket.on(key, Callbacks[key]);
}

View file

@ -0,0 +1,50 @@
var NotWebsocket = function() {
this.connected = false;
$.getJSON(WEB_URL + "/nws/connect", function(data) {
this.hash = data;
this.connected = true;
this.recv(["connect", undefined]);
this.pollint = setInterval(function() {
this.poll();
}.bind(this), 100);
}.bind(this));
this.handlers = {};
}
NotWebsocket.prototype.emit = function(msg, data) {
if(!this.connected) {
setTimeout(function() {
this.emit(msg, data);
}.bind(this), 100);
}
var pkt = [msg, data];
var str = escape(JSON.stringify(pkt));
$.getJSON(WEB_URL+"/nws/"+this.hash+"/"+str, function(){});
}
NotWebsocket.prototype.on = function(msg, callback) {
if(!(msg in this.handlers))
this.handlers[msg] = [];
this.handlers[msg].push(callback);
}
NotWebsocket.prototype.poll = function() {
if(!this.connected)
return;
$.getJSON(WEB_URL+"/nws/"+this.hash+"/poll", function(data) {
for(var i = 0; i < data.length; i++) {
console.log("DBG", data[i]);
this.recv(data[i]);
}
}.bind(this));
}
NotWebsocket.prototype.recv = function(pkt) {
var msg = pkt[0], data = pkt[1];
if(!(msg in this.handlers))
return;
for(var i = 0; i < this.handlers[msg].length; i++) {
this.handlers[msg][i](data);
}
}

View file

@ -313,6 +313,7 @@
<script src="./assets/js/media.js"></script>
<script src="./assets/js/functions.js"></script>
<script src="./assets/js/client.js"></script>
<script src="./assets/js/notwebsocket.js"></script>
<script src="./assets/js/callbacks.js"></script>
<!-- APIs -->
<script src="http://api.dmcdn.net/all.js"></script>