Files
dss-realtime/server.js
2014-08-24 21:40:28 +01:00

93 lines
2.4 KiB
JavaScript

/*************************************
//
// dss-realtime app
//
**************************************/
var express = require('express'), http = require('http'), connect = require('connect'), bodyParser = require('body-parser'), session = require('express-session'), cookieParser = require('cookie-parser'), cookie_reader = require('cookie'), io = require('socket.io');
var app = express();
var sessionStore = new connect.session.MemoryStore();
var SITE_SECRET = 'I am not wearing any pants';
var SITE_KEY = 'express.sid';
app.use(bodyParser());
app.use(cookieParser(SITE_SECRET));
app.use(session({
store: sessionStore,
key: SITE_KEY,
secret: SITE_SECRET
}));
var port = app.get('port') || 8001;
var server = http.createServer(app);
server.listen(port, function () {
console.log("Express server listening on port " + port);
});
/**
* Socket.io
*/
var sio = io.listen(server);
var sessions = {};
var clients = {};
sio.use(function ioSession(socket, next) {
// create the fake req that cookieParser will expect
var req = {
"headers": {
"cookie": socket.request.headers.cookie
}
};
next();
});
sio.set('authorization', function (data, accept) {
//create fake req object to pass to cookie parser
if (data.headers.cookie) {
data.cookie = cookie_reader.parse(data.headers.cookie);
return accept(null, true);
}
return accept('error', false);
});
sio.sockets.on('connection', function (socket) {
var hs = socket.handshake;
var cookie = cookie_reader.parse(socket.handshake.headers.cookie);
console.log('A socket with sessionID ' + cookie['sessionid'] + ' connected.');
sessions[cookie['sessionid']] = socket.id;
clients[socket.id] = socket;
socket.on('disconnect', function () {
delete clients[socket.id]; // remove the client from the array
});
});
/**
* Web Server
*/
app.use(express.static(__dirname + '/public'));
//set the view engine
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.get("/", function (req, res) {
res.render('index', {});
});
app.post("/notification", function (req, res) {
if (sessions[req.body.sessionid]) {
console.log("Data is: " + req.body.message);
clients[sessions[req.body.sessionid]].emit('notification', req.body);
res.send(req.body);
}else{
console.log("Session with key " + req.body.sessionid + "not found");
res.status(410).end();
}
});