darkwire.io/src/app.js
2016-01-13 13:50:39 -05:00

83 lines
1.9 KiB
JavaScript

// System
import express from 'express';
import mustacheExpress from 'mustache-express';
import session from 'express-session';
import Redis from 'connect-redis';
import Io from 'socket.io';
import http from 'http';
import shortid from 'shortid';
import _ from 'underscore';
import Room from './room';
import favicon from 'serve-favicon';
import compression from 'compression';
const app = express();
const server = http.createServer(app);
const io = Io(server);
const RedisStore = Redis(session);
const sessionMiddleware = session({
store: new RedisStore({
host: 'localhost',
port: 6379,
db: 2
}),
secret: 'hay',
resave: true,
saveUninitialized: true
});
let rooms = [];
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
app.use(compression());
app.use(favicon(__dirname + '/public/favicon.ico'));
app.engine('mustache', mustacheExpress());
app.set('view engine', 'mustache');
app.set('views', __dirname + '/views');
app.use(sessionMiddleware);
app.use(express.static(__dirname + '/public'));
// Routes
function generateNewRoom(req, res, id) {
const room = new Room(io, id);
rooms.push(room);
console.log('generating new room');
room.on('empty', function() {
rooms = _.without(rooms, _.findWhere(rooms, {_id: room._id}));
});
return res.redirect(`/${id}`);
}
app.get('/', (req, res) => {
const id = shortid.generate();
generateNewRoom(req, res, id);
});
app.get('/loaderio-6f94612a3fa71ff98b23eecfcca2de6c.html', (req, res) => {
res.send('loaderio-6f94612a3fa71ff98b23eecfcca2de6c');
});
app.get('/:roomId', (req, res) => {
const roomId = req.params.roomId || false;
let roomExists = _.findWhere(rooms, {_id: roomId}) || false;
if (roomExists) {
return res.render('index', {username: shortid.generate()});
}
return res.redirect('/');
});
// Events
server.listen(3000, () => {
console.log('fatty is on.');
});