/app.js
var xmpp = require('simple-xmpp');
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var cookie = require('./node_modules/express/node_modules/cookie');
var connect = require('./node_modules/express/node_modules/connect');
var Agent = require('./agent.js');
var cookie_secret = 'Du:drKkl8&<\\I~Tc~y$nnJbX?Zt<M}1K4lx*N<iJOc|UpSK$w#iZvxqJ1vOrv(088Ev!~2;1="M!)BVD{%:7U1{0#';
var sessionStore = new express.session.MemoryStore();
app.use(express.cookieParser(cookie_secret));
app.use(express.session({
store: sessionStore,
key: 'connect.sess'
}));
app.use(express.json());
app.use(express.static(__dirname + '/www'));
io.configure(function() {
io.set('authorization', function (handshakeData, callback) {
if (handshakeData.headers.cookie) {
var cookies = cookie.parse(handshakeData.headers.cookie);
var signedCookies = connect.utils.parseSignedCookies(cookies, cookie_secret);
var sid = signedCookies['connect.sess'];
sessionStore.load(sid, function(err, sess) {
if (err) return callback(err);
if (!sess) return callback('No session');
handshakeData.session = sess;
callback(null, true);
});
} else {
callback('No session cookie');
}
});
});
server.listen(4000);
var agents = {};
io.sockets.on('connection', function(socket) {
var session = socket.handshake.session;
var agent;
socket.on('login', function(data) {
agent = new Agent();
agent.on('message', function(data) {
socket.emit('message', data);
});
agent.on('buddy', function(data) {
socket.emit('buddy', data);
});
agent.login(data.username, data.password, function(err) {
if (err) {
console.log(err);
socket.emit('login-failed');
} else {
socket.emit('login-successful', {
username: data.username
});
session.jid = data.username;
session.save();
agents[session.jid] = agent;
console.log('logged in');
agent.getRoster(function(err, roster) {
socket.emit('roster', roster);
});
}
});
});
socket.on('logout', function() {
agent.logout();
session.destroy();
socket.disconnect();
});
socket.on('get-roster', function() {
agent.getRoster(function(err, roster) {
socket.emit('roster', roster);
});
});
socket.on('send-message', function(data) {
agent.sendMessage(data);
});
});