var server = require('socket.io') var ws = module.exports = {} var rooms = {} ws.listen = function(app){ ws.io = server(app) } ws.add = function(name){ if (name in rooms) { return } var room = rooms[name] = {} var messages = room.messages = [] room.users = {} sockets = {} console.log("new room >> " + name) var ns = ws.io.of('/' + name) ns.on('connection', function(socket){ var nick console.log("new connection ...") socket.on('join', function(data){ nick = data.nick console.log("joined >> " + nick) if (sockets[nick]) { // already connected? sockets[nick].disconnect() sockets[nick] = socket room.users[nick] = true socket.emit("messages", messages) } }) socket.on('message', function(data){ console.log(data) console.log("<" + data.nick + "> " + data.msg) if (messages.length > 20) { messages.shift() } messages.push(data) ns.emit('message', data) }) socket.on('disconnect', function(){ delete sockets[nick] delete room.users[nick] }) }) }