Cloned DMOJ
This commit is contained in:
parent
f623974b58
commit
49dc9ff10c
513 changed files with 132349 additions and 39 deletions
68
resources/event.js
Normal file
68
resources/event.js
Normal file
|
@ -0,0 +1,68 @@
|
|||
function EventReceiver(websocket, poller, channels, last_msg, onmessage) {
|
||||
this.websocket_path = websocket;
|
||||
this.channels = channels;
|
||||
this.last_msg = last_msg;
|
||||
this.poller_base = poller;
|
||||
this.poller_path = poller + channels.join('|');
|
||||
if (onmessage)
|
||||
this.onmessage = onmessage;
|
||||
var receiver = this;
|
||||
|
||||
function init_poll() {
|
||||
function long_poll() {
|
||||
$.ajax({
|
||||
url: receiver.poller_path,
|
||||
data: {last: receiver.last_msg},
|
||||
success: function (data, status, jqXHR) {
|
||||
receiver.onmessage(data.message);
|
||||
receiver.last_msg = data.id;
|
||||
long_poll();
|
||||
},
|
||||
error: function (jqXHR, status, error) {
|
||||
if (jqXHR.status == 504)
|
||||
long_poll();
|
||||
else {
|
||||
console.log('Long poll failure: ' + status);
|
||||
console.log(jqXHR);
|
||||
setTimeout(long_poll, 2000);
|
||||
}
|
||||
},
|
||||
dataType: "json"
|
||||
});
|
||||
}
|
||||
long_poll();
|
||||
}
|
||||
|
||||
this.onwsclose = null;
|
||||
if (window.WebSocket) {
|
||||
this.websocket = new WebSocket(websocket);
|
||||
var timeout = setTimeout(function () {
|
||||
receiver.websocket.close();
|
||||
receiver.websocket = null;
|
||||
init_poll();
|
||||
}, 2000);
|
||||
this.websocket.onopen = function (event) {
|
||||
clearTimeout(timeout);
|
||||
this.send(JSON.stringify({
|
||||
command: 'start-msg',
|
||||
start: last_msg
|
||||
}));
|
||||
this.send(JSON.stringify({
|
||||
command: 'set-filter',
|
||||
filter: channels
|
||||
}));
|
||||
};
|
||||
this.websocket.onmessage = function (event) {
|
||||
var data = JSON.parse(event.data);
|
||||
receiver.onmessage(data.message);
|
||||
receiver.last_msg = data.id;
|
||||
};
|
||||
this.websocket.onclose = function (event) {
|
||||
if (event.code != 1000 && receiver.onwsclose !== null)
|
||||
receiver.onwsclose(event);
|
||||
}
|
||||
} else {
|
||||
this.websocket = null;
|
||||
init_poll();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue