doctype 5 html head link(href='/stylesheets/style.css', rel='stylesheet') script(src='http://code.jquery.com/jquery-1.6.1.min.js') script(src='/socket.io/socket.io.js') script // socket.io specific code var socket = io.connect(); socket.on('connect', function () { $('#chat').addClass('connected'); }); socket.on('announcement', function (msg) { console.log("Received announcement"); $('#lines').append($('

').append($('').text(msg))); }); socket.on('nicknames', function (nicknames) { $('#nicknames').empty().append($('Online: ')); for (var i in nicknames) { $('#nicknames').append($('').text(nicknames[i])); } }); socket.on('user message', function(data){ message('>',data); }); socket.on('execute', message); socket.on('reconnect', function () { $('#lines').remove(); message('System', 'Reconnected to the server'); }); socket.on('reconnecting', function () { message('System', 'Attempting to re-connect to the server'); }); socket.on('error', function (e) { message('System', e ? e : 'A unknown error occurred'); }); function message (from, msg) { $('#lines').append($('

').append($('').text(from), msg)); } // dom manipulation $(function () { $('#set-nickname').submit(function (ev) { socket.emit('nickname', $('#nick').val(), function (set) { if (!set) { clear(); return $('#chat').addClass('nickname-set'); } $('#nickname-err').css('visibility', 'visible'); }); return false; }); $('#send-message').submit(function () { var msg = $('#message').val(); if(msg.charAt(0)=='/'){ var i = msg.indexOf(' '); var data = {}; data['name'] = msg.substring(1,i); var payload = msg.substring(i); try{ payload = jQuery.parseJSON(payload); }catch(err){ console.log("Not json"); } data['payload'] = payload; message('Exec:', msg); socket.emit('execute', data); } else if(msg.charAt(0)=='$'){ var i = msg.indexOf(' '); var data = msg.substring(1); console.log("Client:"+data); message("Client:"+data); try{ data = jQuery.parseJSON(data); }catch(err){ console.log("Not json"+err); } console.log("Client(final):"+JSON.stringify(data)); socket.emit('client', data); } else{ message('me', msg); socket.emit('user message', msg); } clear(); $('#lines').get(0).scrollTop = 10000000; return false; }); function clear () { $('#message').val('').focus(); }; }); body #chat #nickname form.wrap#set-nickname p Please type in your nickname and press enter. input#nick p#nickname-err Nickname already in use #connecting .wrap Connecting to socket.io server #messages #nicknames #lines form#send-message input#message button Send