1 /** 2 * 2011 Peter 'Pita' Martischka 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS-IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 var http = require('http') 18 , url = require('url') 19 , fs = require('fs') 20 , io = require('socket.io') 21 , sys = require('sys') 22 , server; 23 24 server = http.createServer(function(req, res){ 25 var path = url.parse(req.url).pathname; 26 27 if(path.substring(0,"/static".length) == "/static" || path.substring(0,"/p/".length) == "/p/") 28 { 29 if(path.substring(0,"/p/".length) == "/p/") 30 { 31 if(path.length < 7) 32 send404(res, path); 33 34 path = "/static/padhtml"; 35 } 36 37 sendFile(res, path, __dirname + "/.." + path); 38 } 39 else if(path == "/") 40 { 41 sendRedirect(res, path, "/p/test"); 42 } 43 else if(path == "/newpad") 44 { 45 sendRedirect(res, path, "/p/" + randomPadName()); 46 } 47 else if(path == "/ep/pad/reconnect") 48 { 49 if(req.headers.referer != null) 50 sendRedirect(res, path, req.headers.referer); 51 else 52 send404(res, path); 53 } 54 else 55 { 56 send404(res, path); 57 } 58 }); 59 server.listen(9001); 60 61 function randomPadName() { 62 var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; 63 var string_length = 10; 64 var randomstring = ''; 65 for (var i=0; i<string_length; i++) { 66 var rnum = Math.floor(Math.random() * chars.length); 67 randomstring += chars.substring(rnum,rnum+1); 68 } 69 return randomstring; 70 } 71 72 function sendFile(res, reqPath, path) 73 { 74 fs.readFile(path, function(err, data){ 75 if (err){ 76 send404(res, reqPath); 77 } else { 78 var contentType = "text/html"; 79 80 if (path.substring(path.length -3, path.length) == ".js") 81 contentType = "text/javascript"; 82 else if (path.substring(path.length -4, path.length) == ".css") 83 contentType = "text/css"; 84 else if (path.substring(path.length -4, path.length) == ".gif") 85 contentType = "image/gif"; 86 87 res.writeHead(200, {'Content-Type': contentType}); 88 res.write(data, 'utf8'); 89 res.end(); 90 91 requestLog(200, reqPath, "-> " + path); 92 } 93 }); 94 } 95 96 function send404(res, reqPath) 97 { 98 res.writeHead(404); 99 res.write("404 - Not Found"); 100 res.end(); 101 102 requestLog(404, reqPath, "NOT FOUND!"); 103 } 104 105 function sendRedirect(res, reqPath, location) 106 { 107 res.writeHead(302, {'Location': location}); 108 res.end(); 109 110 requestLog(302, reqPath, "-> " + location); 111 } 112 113 function requestLog(code, path, desc) 114 { 115 console.log(code +", " + path + ", " + desc); 116 } 117 118 var io = io.listen(server); 119 var messageHandler = require("./MessageHandler"); 120 messageHandler.setSocketIO(io); 121 122 io.on('connection', function(client){ 123 try{ 124 messageHandler.handleConnect(client); 125 }catch(e){console.error(e);} 126 127 client.on('message', function(message){ 128 try{ 129 messageHandler.handleMessage(client, message); 130 }catch(e){console.error(e);} 131 }); 132 133 client.on('disconnect', function(){ 134 try{ 135 messageHandler.handleDisconnect(client); 136 }catch(e){console.error(e);} 137 }); 138 }); 139 140 141 142 143