Advertisement
djazz

Simplechat Server

Oct 23rd, 2011
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Made by djazz
  2. // This is a chat server for node.js
  3. // See demo at http://djazz.mine.nu:8004/
  4.  
  5. var http = require('http');
  6. var fs = require('fs');
  7.  
  8. var loadFile = function (filename, mime, res) {
  9.     fs.readFile(filename, function (err, data) {
  10.         if(err) throw err;
  11.         res.writeHead(200, {'Content-Type': mime});
  12.         res.end(data);
  13.     });
  14. };
  15.  
  16. var server = http.createServer(function (request, response) {
  17.     switch(request.url) {
  18.         case '/':
  19.             loadFile(__dirname+'/index.html', 'text/html', response);
  20.             break;
  21.         case '/script.js':
  22.             loadFile(__dirname+'/script.js', 'application/javascript', response);
  23.             break;
  24.         case '/style.css':
  25.             loadFile(__dirname+'/style.css', 'text/css', response);
  26.             break;
  27.         default:
  28.             response.writeHead(404, {'Content-Type': 'text/plain'});
  29.             response.end('Not found');
  30.             break;
  31.     }
  32. });
  33. server.listen(8004, function () {
  34.     console.log(timestamp(), 'Chatroom server started');
  35. });
  36. var io = require('socket.io').listen(server);
  37. io.set('log level', 1);
  38.  
  39. var uid = 0;
  40.  
  41. var users = {};
  42. var usernameExists = function (username) {
  43.     for(var i in users) {
  44.         if(users.hasOwnProperty(i) && users[i].name === username) return true;
  45.     }
  46.     return false;
  47. };
  48. var timestamp = function () {
  49.     var now = new Date();
  50.     var h = now.getHours();
  51.     var m = now.getMinutes();
  52.     var s = now.getSeconds();
  53.     return (h>9?h:'0'+h)+"."+(m>9?m:'0'+m)+"."+(s>9?s:'0'+s);
  54. };
  55.  
  56. io.sockets.on('connection', function (socket) {
  57.     socket.uid = uid++;
  58.     socket.on('message', function (message) {
  59.         if(socket.uid > -1) {
  60.             message = message.replace(/\</g, '&lt;').replace(/\>/g, '&gt;');
  61.             io.sockets.emit('message', {'message': message, 'index': socket.uid});
  62.             console.log(timestamp(), users[socket.uid].name+':', message);
  63.         }
  64.     });
  65.     socket.on('join', function (username) {
  66.         username = username.trim().substring(0, 32);
  67.         if(usernameExists(username)) {
  68.             var i=2;
  69.             while(usernameExists(username+i)) {
  70.                 i+=1;
  71.             }
  72.             username += i;
  73.         }
  74.         username = username.replace(/\</g, '&lt;').replace(/\>/g, '&gt;');
  75.         users[socket.uid] = {name: username};
  76.         socket.broadcast.emit('join', {'index': socket.uid, name: username});
  77.         socket.emit('userlist', users);
  78.         console.log(timestamp(), username+" joined");
  79.     });
  80.     socket.on('disconnect', function () {
  81.         if(users[socket.uid] !== undefined) {
  82.             console.log(timestamp(), (users[socket.uid].name)+" left");
  83.             socket.broadcast.emit('left', socket.uid);
  84.             delete users[socket.uid];
  85.         }
  86.     });
  87. });
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement