53 lines
1021 B
JavaScript
53 lines
1021 B
JavaScript
function Messaging() {
|
|
var ws = new WebSocket('ws://' + window.location.hostname + '/play/');
|
|
var keepAlivePeriod = 20000;
|
|
var receiveHook;
|
|
var queue = []
|
|
ws.addEventListener('message', messageListener);
|
|
|
|
return {
|
|
receive: receive,
|
|
send: send
|
|
}
|
|
|
|
function messageListener(event) {
|
|
var o = JSON.parse(event.data);
|
|
if(o.tag == "Error") {
|
|
console.log(o.error);
|
|
} else {
|
|
if(receiveHook != undefined) {
|
|
receiveHook(o);
|
|
} else {
|
|
queue.push(o);
|
|
}
|
|
}
|
|
};
|
|
|
|
function receive(predicate) {
|
|
predicate = predicate || function() {return true;};
|
|
return function(f) {
|
|
for(var i = 0; i < queue.length; i++) {
|
|
if(predicate(queue[i])) {
|
|
return f(queue.splice(i, 1)[0]);
|
|
}
|
|
}
|
|
receiveHook = function(message) {
|
|
if(predicate(message)) {
|
|
receiveHook = null;
|
|
f(message);
|
|
} else {
|
|
queue.push(o);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function send(o) {
|
|
ws.send(JSON.stringify(o));
|
|
}
|
|
|
|
function ping() {
|
|
setTimeout(function() {send({tag: "Ping"});}, keepAlivePeriod);
|
|
}
|
|
}
|