nedap websockets work

This commit is contained in:
Astro 2010-12-06 19:10:44 +01:00
parent 74b34dcf05
commit 0c64b536c8
3 changed files with 43 additions and 32 deletions

View File

@ -2,7 +2,7 @@ var Connect = require('connect');
var wss = require('websocket-server');
var ltx = require('ltx');
var WS_PROTOCOL = 'nedap-kneemFothbedchoadHietEnobKavLub1';
var WS_KEY = 'nedap-kneemFothbedchoadHietEnobKavLub1';
var backend, question, answers, scores;
@ -19,11 +19,12 @@ function html(body) {
function nedap(app) {
app.get('/', function(req, res) {
if (question && answers) {
console.log({question:question,answers:answers})
var form = new ltx.Element('form',
{ action: '/',
method: 'POST',
enctype: 'application/x-www-form-urlencoded' });
form.c('p').text(question);
form.c('p').t(question);
var ul = form.c('ul');
for(var i = 0; i < answers.length; i++) {
ul.c('li').
@ -32,7 +33,7 @@ function nedap(app) {
name: 'a',
value: ''+i }).
c('label', { for: 'a'+i }).
t(answers[i]);
t(answers[i].text);
}
form.c('input', { type: 'submit',
value: 'Submit' });
@ -79,11 +80,25 @@ var server = Connect.createServer(
);
wss.createServer({ server: server }).on('connection', function(conn) {
console.log(conn);
if (conn.protocol === WS_PROTOCOL) {
backend = conn;
var authed = false;
conn.on('message', function(data) {
conn.on('message', function(data) {
if (!authed) {
if (data.toString() === WS_KEY) {
console.warn('Authorized WebSocket');
backend = conn;
authed = true;
var reset = function() {
backend = null;
};
conn.on('close', reset);
conn.on('error', reset);
} else {
console.warn('Unauthorized backend WebSocket');
conn.close();
}
} else {
try {
var msg = JSON.parse(data);
console.log({msg: msg});
@ -102,17 +117,8 @@ console.log(conn);
} catch (e) {
console.error(e.stack);
}
});
var reset = function() {
backend = null;
};
conn.on('close', reset);
conn.on('error', reset);
} else {
console.error({ 'Wrong Protocol': conn.protocol });
conn.end();
}
}
});
});
server.listen(8080); /* TODO: port 80 */

View File

@ -50,7 +50,7 @@ function loadQuizData(done) {
}
var url = 'ws://' + document.location.host + '/';
var ws = new WebSocket(url, 'quiz');
var ws = new WebSocket(url, '*');
ws.onerror = function(e) {
console.error(e.message);
@ -61,6 +61,7 @@ ws.onclose = function() {
var onBackendMessage;
ws.onmessage = function(data) {
try {
console.log('fromBackend: ' + data);
var msg = JSON.parse(data);
if (onBackendMessage)
onBackendMessage(msg);
@ -69,6 +70,7 @@ ws.onmessage = function(data) {
}
};
var sendToBackend = function(msg) {
console.log('toBackend: ' + JSON.stringify(msg));
ws.send(JSON.stringify(msg));
};
ws.onopen = function() {

View File

@ -5,9 +5,10 @@ var wsc = require('websocket-client');
var frontend;
/* TODO: url */
var nedap = new wsc.WebSocket('ws://localhost:8080/', 'nedap-kneemFothbedchoadHietEnobKavLub1');
var nedap = new wsc.WebSocket('ws://localhost:8080/', 'quiz-nedap');
nedap.onopen = function() {
console.log('NEDAP opened');
nedap.send('nedap-kneemFothbedchoadHietEnobKavLub1');
};
nedap.onclose = function() {
console.log('NEDAP closed');
@ -33,25 +34,27 @@ var server = Connect.createServer(
);
wss.createServer({ server: server }).on('connection', function(conn) {
if (conn.protocol === 'quiz') {
frontend = conn;
frontend = conn;
conn.on('data', function(data) {
conn.on('message', function(data) {
console.log({data:data});
try {
var msg = JSON.parse(data);
if (msg.nedap) {
console.log({ toNedap: msg.nedap });
nedap.send(JSON.stringify(msg.nedap));
}
});
} catch (e) {
console.error(e.stack);
}
});
var reset = function() {
frontend = null;
};
conn.on('close', reset);
conn.on('error', reset);
} else {
conn.end();
}
var reset = function() {
frontend = null;
};
conn.on('close', reset);
conn.on('error', reset);
});
server.listen(8081);