OmnomIRC.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!node
  2. var fs = require('fs'),
  3. url = require('url'),
  4. path = require('path'),
  5. mimeTypes = {
  6. 'html': 'text/html',
  7. 'js': 'text/javascript',
  8. 'css': 'text/css',
  9. 'png': 'image/png',
  10. 'jpg': 'image/jpeg'
  11. },
  12. app = require('http').createServer(function(req,res){
  13. req.addListener('end',function(){
  14. console.log('request made for '+req.url);
  15. var uri = url.parse(req.url).pathname,
  16. filename = path.join('./www/',unescape(uri)),
  17. stats;
  18. try{
  19. stats = fs.lstatSync(filename);
  20. }catch(e){
  21. res.writeHead(404,{
  22. 'Content-type': 'text/plain'
  23. });
  24. res.write('404 Not Found\n');
  25. res.end();
  26. return;
  27. }
  28. if(stats.isFile()){
  29. var fileStream,
  30. mimetype = mimeTypes[path.extname(filename).split('.')[1]];
  31. res.writeHead(200,{
  32. 'Content-Type': mimetype
  33. });
  34. fileStream = fs.createReadStream(filename);
  35. fileStream.pipe(res);
  36. }else if(stats.isDirectory()){
  37. res.writeHead(200,{
  38. 'Content-Type': 'text/plain'
  39. });
  40. res.write('Index of '+url+'\n');
  41. res.write('TODO, show index');
  42. res.end();
  43. }else{
  44. res.writeHead(500,{
  45. 'Content-Type': 'text/plain'
  46. });
  47. res.write('500 Internal server error\n');
  48. res.end();
  49. }
  50. }).resume();
  51. }).listen(80),
  52. io = require('socket.io').listen(app);
  53. io.sockets.on('connection',function(socket){
  54. socket.on('join',function(data){
  55. socket.join(data.name);
  56. io.sockets.in(data.name).emit('message',{
  57. message: ' joined the channel',
  58. room: data.name,
  59. from: 0
  60. });
  61. });
  62. socket.on('part',function(data){
  63. socket.leave(data.name);
  64. io.sockets.in(data.name).emit('message',{
  65. message: ' parted the channel',
  66. room: data.name,
  67. from: 0
  68. });
  69. });
  70. });