gif joker censor interface
This commit is contained in:
parent
d1f86d6648
commit
c6ee661bf9
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>███ interface</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<script type="text/javascript" src="jquery-1.4.2.js" defer></script>
|
||||
<script type="text/javascript" src="censor.js" defer></script>
|
||||
<style>
|
||||
.image {
|
||||
background-color: #ccc;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.image p {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Frontend keys</h1>
|
||||
<dl>
|
||||
<dt>Player select</dt>
|
||||
<dd>a b c (Buzzers)</dd>
|
||||
<dt>Answers</dt>
|
||||
<dd>1 2 3 4</dd>
|
||||
<dt>Confirm answer</dt>
|
||||
<dd>\n</dd>
|
||||
<dt>Switch to scoreboard</dt>
|
||||
<dd>Space</dd>
|
||||
<dt>Jokers</dt>
|
||||
<dd><b>F</b>iftyfifty (Wikipedia)</dd>
|
||||
<dd><b>N</b>edap (Poll)</dd>
|
||||
<dd><b>I</b>RC</dd>
|
||||
<dd><b>S</b>hift, then a b c for player</dd>
|
||||
<dd><b>M</b>orse</dd>
|
||||
<dd><b>L</b>eak</dd>
|
||||
<dd><b>G</b>if (Nedap backend)</dd>
|
||||
<h1>GIF joker</h1>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,84 @@
|
|||
var ws, sendToBackend, onBackendMessage;
|
||||
function setupWs() {
|
||||
var url = 'ws://' + document.location.host + '/';
|
||||
ws = new WebSocket(url, 'censor');
|
||||
|
||||
ws.onerror = function(e) {
|
||||
console.error(e.message);
|
||||
window.setTimeout(setupWs, 100);
|
||||
};
|
||||
ws.onclose = function() {
|
||||
console.error('WebSocket closed');
|
||||
window.setTimeout(setupWs, 100);
|
||||
};
|
||||
ws.onmessage = function(event) {
|
||||
try {
|
||||
var data = event.data;
|
||||
console.log({fromBackend: data});
|
||||
var msg = JSON.parse(data);
|
||||
if (onBackendMessage)
|
||||
onBackendMessage(msg);
|
||||
} catch(e) {
|
||||
console.error(e.message);
|
||||
}
|
||||
};
|
||||
sendToBackend = function(msg) {
|
||||
console.log('toBackend: ' + JSON.stringify(msg));
|
||||
ws.send(JSON.stringify(msg));
|
||||
};
|
||||
ws.onopen = function() {
|
||||
/* TODO: rm debug */
|
||||
sendToBackend({ nedap: "ping" });
|
||||
};
|
||||
}
|
||||
setupWs();
|
||||
|
||||
var MAX_IMAGES = 3;
|
||||
var imgsDisplayed = 0, queue = [];
|
||||
|
||||
function mayDisplayNext() {
|
||||
if (imgsDisplayed >= MAX_IMAGES)
|
||||
return;
|
||||
|
||||
displayImage(queue.shift());
|
||||
}
|
||||
|
||||
function humanSize(size) {
|
||||
var unit = "";
|
||||
var units = ["K", "M"];
|
||||
while(size > 1024 && units.length > 0) {
|
||||
size /= 1024;
|
||||
unit = units.shift();
|
||||
}
|
||||
return (Math.round(size * 10) / 10) + " " + unit + "B";
|
||||
}
|
||||
|
||||
function displayImage(img) {
|
||||
var div = $("<div class=\"image\"><p><a class=\"accept\">Accept</a> <a class=\"reject\">Reject</a> <a class=\"postpone\">Postpone</a></p><h2></h2><img/></div>");
|
||||
div.find("h2").text(img.name + " (" + humanSize(img.size) + ")");
|
||||
div.find("img").attr('src', img.path);
|
||||
$('body').append(div);
|
||||
imgsDisplayed++;
|
||||
|
||||
var goAway = function() {
|
||||
div.remove();
|
||||
imgsDisplayed--;
|
||||
mayDisplayNext();
|
||||
};
|
||||
div.find(".accept").click(function() {
|
||||
sendToBackend({ gif: img.path });
|
||||
goAway();
|
||||
});
|
||||
div.find(".reject").click(goAway);
|
||||
div.find(".postpone").click(function() {
|
||||
queue.push(img);
|
||||
goAway();
|
||||
});
|
||||
}
|
||||
|
||||
onBackendMessage = function(msg) {
|
||||
if (msg.gif) {
|
||||
queue.push(msg.gif);
|
||||
mayDisplayNext();
|
||||
}
|
||||
};
|
|
@ -6,7 +6,8 @@ var mime = require('mime');
|
|||
|
||||
var WS_KEY = 'nedap-kneemFothbedchoadHietEnobKavLub1';
|
||||
var MIME_HTML = 'text/html; charset=UTF-8';
|
||||
var UPLOAD_DIR="static/gifs";
|
||||
var UPLOAD_DIR = "static/gifs";
|
||||
var GIFS_PREFIX = "http://localhost:2342/gifs/";
|
||||
try { fs.mkdirSync(UPLOAD_DIR); } catch (e) {}
|
||||
|
||||
var backend, question, answers, scores, mode;
|
||||
|
@ -146,7 +147,10 @@ function nedap(app) {
|
|||
path = path.split('/').pop();
|
||||
console.log("file", gif.name, path, gif.type);
|
||||
if (backend)
|
||||
backend.sendUTF(JSON.stringify({ gif: "/gifs/" + path }));
|
||||
backend.sendUTF(JSON.stringify({ gif: { path: GIFS_PREFIX + path,
|
||||
name: gif.name,
|
||||
size: gif.size
|
||||
} }));
|
||||
});
|
||||
|
||||
res.writeHead(200, { 'Content-type': MIME_HTML });
|
||||
|
|
6
quiz.js
6
quiz.js
|
@ -1,5 +1,3 @@
|
|||
var GIF_PREFIX = "http://localhost:2342";
|
||||
|
||||
if (!window.console) {
|
||||
var stub = function() { };
|
||||
window.console = { log: stub, error: stub, warn: stub };
|
||||
|
@ -394,12 +392,12 @@ function takeJoker(activePlayer, joker) {
|
|||
$('#gifs img').remove();
|
||||
$('#gifs').show();
|
||||
onBackendMessage = function(msg) {
|
||||
if (msg.nedap.gif) {
|
||||
if (msg.gif) {
|
||||
for(var imgs = $('#gifs img'); imgs.length > 2; imgs = $('#gifs img')) {
|
||||
$(imgs[0]).remove();
|
||||
}
|
||||
var img = $('<img/>');
|
||||
img.attr('src', GIF_PREFIX + msg.nedap.gif);
|
||||
img.attr('src', msg.gif);
|
||||
$('#gifs').append(img);
|
||||
}
|
||||
};
|
||||
|
|
87
server.js
87
server.js
|
@ -3,7 +3,7 @@ var wss = require('websocket').server;
|
|||
var wsc = require('websocket').client;
|
||||
var irc = require('irc-js');
|
||||
|
||||
var frontend;
|
||||
var frontend, sendToCensor;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -30,7 +30,10 @@ function connectNedap() {
|
|||
try {
|
||||
var msg = JSON.parse(wsmsg.utf8Data);
|
||||
console.log({ fromNedap: msg });
|
||||
sendToFrontend({ nedap: msg });
|
||||
if (msg.gif) {
|
||||
sendToCensor(msg);
|
||||
} else
|
||||
sendToFrontend({ nedap: msg });
|
||||
} catch (e) {
|
||||
console.error(e.stack);
|
||||
}
|
||||
|
@ -243,37 +246,61 @@ var gamestate = {};
|
|||
|
||||
new wss({ httpServer: server }).on('request', function(req) {
|
||||
var conn = req.accept(null, req.origin);
|
||||
frontend = conn;
|
||||
|
||||
conn.on('message', function(wsmsg) {
|
||||
console.log(wsmsg);
|
||||
try {
|
||||
var msg = JSON.parse(wsmsg.utf8Data);
|
||||
if (msg.nedap) {
|
||||
console.log({ toNedap: msg.nedap });
|
||||
if (nedap)
|
||||
nedap.sendUTF(JSON.stringify(msg.nedap));
|
||||
} else if (msg.irc === "activate") {
|
||||
pushIrcInfo();
|
||||
} else if (msg.buzzerLED) {
|
||||
buzz.set_led(msg.buzzerLED[0], msg.buzzerLED[1]);
|
||||
} else if (msg.morse) {
|
||||
morse(msg.morse);
|
||||
} else if (msg.gamestate) {
|
||||
gamestate = msg.gamestate;
|
||||
} else if (msg.requestGamestate) {
|
||||
conn.sendUTF(JSON.stringify({ gamestate: gamestate }));
|
||||
if (req.requestedProtocols && req.requestedProtocols.indexOf('censor') >= 0) {
|
||||
/* Censor frontend */
|
||||
sendToCensor = function(obj) {
|
||||
conn.sendUTF(JSON.stringify(obj));
|
||||
};
|
||||
conn.on('message', function(wsmsg) {
|
||||
console.log(wsmsg);
|
||||
try {
|
||||
var msg = JSON.parse(wsmsg.utf8Data);
|
||||
if (msg.gif)
|
||||
sendToFrontend(msg);
|
||||
} catch (e) {
|
||||
console.error(e.stack);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e.stack);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var reset = function() {
|
||||
frontend = null;
|
||||
};
|
||||
conn.on('close', reset);
|
||||
conn.on('error', reset);
|
||||
var reset = function() {
|
||||
sendToCensor = function() { };
|
||||
};
|
||||
conn.on('close', reset);
|
||||
conn.on('error', reset);
|
||||
} else {
|
||||
/* Game frontend */
|
||||
frontend = conn;
|
||||
conn.on('message', function(wsmsg) {
|
||||
console.log(wsmsg);
|
||||
try {
|
||||
var msg = JSON.parse(wsmsg.utf8Data);
|
||||
if (msg.nedap) {
|
||||
console.log({ toNedap: msg.nedap });
|
||||
if (nedap)
|
||||
nedap.sendUTF(JSON.stringify(msg.nedap));
|
||||
} else if (msg.irc === "activate") {
|
||||
pushIrcInfo();
|
||||
} else if (msg.buzzerLED) {
|
||||
buzz.set_led(msg.buzzerLED[0], msg.buzzerLED[1]);
|
||||
} else if (msg.morse) {
|
||||
morse(msg.morse);
|
||||
} else if (msg.gamestate) {
|
||||
gamestate = msg.gamestate;
|
||||
} else if (msg.requestGamestate) {
|
||||
conn.sendUTF(JSON.stringify({ gamestate: gamestate }));
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e.stack);
|
||||
}
|
||||
});
|
||||
|
||||
var reset = function() {
|
||||
frontend = null;
|
||||
};
|
||||
conn.on('close', reset);
|
||||
conn.on('error', reset);
|
||||
}
|
||||
});
|
||||
|
||||
function sendToFrontend(obj) {
|
||||
|
|
Loading…
Reference in New Issue