function sanitizeName(newnick) { var sanitized = ''; if(newnick === null) { sanitized = name.generate(); } else { sanitized = escapeHtml(newnick.trim()); if(sanitized == '') { sanitized = name.generate(); } } return sanitized; }
io.on('connection', function(client){ var session = {uuid:null, name:name.generate()}; sessions[client.sessionId] = session; client.on('message', function(message){ switch(message.type) { case 'DEQUEUE': // someone has removed a song removeFromQueue(message.uuid, session); break; case 'MSG': // someone has sent a message message.who=session.name; util.log('user:'******':'+session.name+': '+message.message); io.broadcast(message); break; case 'NICK': // user changes nickname var oldname = session.name; session.name = sanitizeName(message.name); io.broadcast({ type:'NICK' ,uuid:session.uuid ,oldname:oldname ,name:session.name }); util.log('user:'******':'+oldname+' is now '+session.name); break; case 'READY': // user is ready for music if(currentSongStarted) { client.send({ type:'PLAY' ,song:songs[queue[0]] ,position:(new Date().getTime())-currentSongStarted }); }; break; case 'USER': // user has joined the page session.uuid = message.uuid; session.name = sanitizeName(message.name); client.send({ type:'NICK' ,uuid:session.uuid ,name:session.name }); util.log('Client '+client.sessionId+' user:'******' name:'+session.name+' ip:'+client.connection.remoteAddress); if((session.uuid in clients) == false) { client.broadcast({ type:'JOIN' ,uuid:session.uuid ,name:session.name }); } clients[session.uuid] = client.sessionId; client.send({ type:'NAMES' ,members:getMembers() }); client.send({ type:'SONGS' ,queue:queue ,songs:getSongs() }); if(!currentSongStarted) { client.send({type:'STOP'}); } break; default: // should never see this util.log('user:'******':'+session.name +'; unknown message:'+util.inspect(message, true, null)); break; } }); // someone has disconnected client.on('disconnect', function(){ var session = sessions[client.sessionId]; var clientid = clients[session.uuid]; if(session.uuid && clientid && clientid == client.sessionId) { client.broadcast({ type:'PART' ,uuid:session.uuid }); delete clients[session.uuid]; } delete sessions[client.sessionId]; }); });