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] = {} room.messages = [] room.settings = {} room.users = {} sockets = {} console.log("new room >> " + name) var ns = ws.io.of('/' + name) ns.on('connection', function(socket){ var nick socket.on('join', function(data){ nick = data.nick console.log("join >> " + nick) if (sockets[nick]) { // already connected? sockets[nick].disconnect() } sockets[nick] = socket room.users[nick] = true socket.emit("welcome", room) ns.emit('joined', data) }) socket.on('message', function(data){ if (room.messages.length > 20) { room.messages.shift() } room.messages.push(data) ns.emit('message', data) }) socket.on('settings', function(data){ Object.keys(data).forEach(function(key){ room.settings[key] = data[key] }) ns.emit('settings', data) }) socket.on('disconnect', function(){ delete sockets[nick] delete room.users[nick] ns.emit('parted', {nick: nick}) }) }) }