12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- var express = require('express'),
- async = require('async'),
- pg = require("pg"),
- cookieParser = require('cookie-parser'),
- bodyParser = require('body-parser'),
- methodOverride = require('method-override'),
- app = express(),
- server = require('http').Server(app),
- io = require('socket.io')(server);
- io.set('transports', ['polling']);
- var port = process.env.PORT || 4000;
- io.sockets.on('connection', function (socket) {
- socket.emit('message', { text : 'Welcome!' });
- socket.on('subscribe', function (data) {
- socket.join(data.channel);
- });
- });
- async.retry(
- {times: 1000, interval: 1000},
- function(callback) {
- pg.connect('postgres://postgres@db/postgres', function(err, client, done) {
- if (err) {
- console.error("Waiting for db");
- }
- callback(err, client);
- });
- },
- function(err, client) {
- if (err) {
- return console.err("Giving up");
- }
- console.log("Connected to db");
- getVotes(client);
- }
- );
- function getVotes(client) {
- client.query('SELECT vote, COUNT(id) AS count FROM votes GROUP BY vote', [], function(err, result) {
- if (err) {
- console.error("Error performing query: " + err);
- } else {
- var votes = collectVotesFromResult(result);
- io.sockets.emit("scores", JSON.stringify(votes));
- }
- setTimeout(function() {getVotes(client) }, 1000);
- });
- }
- function collectVotesFromResult(result) {
- var votes = {a: 0, b: 0};
- result.rows.forEach(function (row) {
- votes[row.vote] = parseInt(row.count);
- });
- return votes;
- }
- app.use(cookieParser());
- app.use(bodyParser());
- app.use(methodOverride('X-HTTP-Method-Override'));
- app.use(function(req, res, next) {
- res.header("Access-Control-Allow-Origin", "*");
- res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
- res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
- next();
- });
- app.use(express.static(__dirname + '/views'));
- app.get('/', function (req, res) {
- res.sendFile(path.resolve(__dirname + '/views/index.html'));
- });
- server.listen(port, function () {
- var port = server.address().port;
- console.log('App running on port ' + port);
- });
|