Created
November 29, 2012 16:20
-
-
Save flexd/4170111 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var spawn = require('child_process').spawn; | |
var reader; | |
var util = require('util'); | |
var csv = require('ya-csv'); | |
var restify = require('restify'); | |
var csvreader = csv.createCsvFileReader('folk.csv', { | |
'separator': ';', | |
'quote': '"', | |
'escape': '"', | |
'comment': '', | |
}); | |
var check = require('validator').check, | |
sanitize = require('validator').sanitize | |
var mysql = require('mysql'); | |
function spawnReader() { | |
reader = spawn('python', ['uidgrabber.py']); | |
console.log("uidgrabber running pid: " + reader.pid); | |
} | |
function handleReaderErrors(reader) { | |
reader.stderr.on('data', function (data) { | |
console.log('stderr: ' + data); | |
}); | |
reader.on('exit', function (code) { | |
console.log('uidgrabber process exited with code ' + code); | |
handleReaderErrors(reader); | |
spawnReader(); | |
}); | |
} | |
var connection = mysql.createConnection({ | |
host : 'localhost', | |
user : 'cardqueue', | |
password : 'superpassword123456', | |
database : 'cardqueue', | |
}); | |
connection.connect(); | |
spawnReader(); | |
handleReaderErrors(reader); | |
function handleDisconnect(connection) { | |
connection.on('error', function(err) { | |
if (!err.fatal) { | |
return; | |
} | |
if (err.code !== 'PROTOCOL_CONNECTION_LOST') { | |
throw err; | |
} | |
console.log('Re-connecting lost connection: ' + err.stack); | |
connection = mysql.createConnection(connection.config); | |
handleDisconnect(connection); | |
connection.connect(); | |
}); | |
} | |
handleDisconnect(connection); | |
folk = []; | |
uids = []; | |
csvreader.setColumnNames([ 'id', 'first', 'last' ]); | |
csvreader.addListener('data', function(data) { | |
//console.log("ID: " + data.id + " Fornavn: " + data.first + " Etternavn: " + data.last); | |
folk[data.id] = data; | |
}); | |
// Web server | |
var express = require('express'); | |
var app = require('express')(); | |
var eserver = require('http').createServer(app), | |
io = require('socket.io').listen(eserver); | |
eserver.listen(8080); | |
console.log("static file server for index.html and assets listening on port 8080"); | |
app.use(express.logger()); | |
app.use(express.methodOverride()); | |
app.use(express.bodyParser()); | |
app.use(express.static(__dirname + '/public')); | |
var lastUID = ""; | |
// Websocket stuff. | |
io.sockets.on('connection', function (socket) { | |
}); | |
// Setup bits | |
var server = restify.createServer(); | |
server.use(restify.bodyParser()); | |
// Handle stuff | |
// | |
server.get('/queue', getQueue); | |
server.get('/people', getPeople); | |
function getQueue(req, res, next) { | |
res.send(uids); | |
} | |
function getPeople(req, res, next) { | |
connection.query('SELECT * FROM people ORDER BY lastname, firstname DESC LIMIT 10', function (err, rows, fields) { | |
if (err) { | |
return next(new restify.InternalError(err)); | |
} | |
else { | |
res.send(rows); | |
} | |
}); | |
} | |
// Now listen! (fairy voice from zelda is now in your head!) | |
server.listen(3000, function() { | |
console.log('%s listening at %s', server.name, server.url); | |
}); | |
reader.stdout.on('data', function (data) { | |
var data = data.toString(); | |
data = data.replace(/\u001b\[\d{0,2}m/g, ''); // Remove ANSI colors. | |
var uid = /UID: (.+)/.exec(data); | |
if (uid) { | |
uid = uid[1]; | |
if (uid != lastUID) { | |
var person = folk[uid]; | |
uids.push({ | |
id: uid, | |
firstname: person.first, | |
lastname: person.last | |
}); | |
io.sockets.emit("updated"); | |
} | |
lastUID = uid; | |
} | |
}); | |
console.log("This process has the pid: " + process.pid); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment