/** * 2011 Peter 'Pita' Martischka * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS-IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var http = require('http') , url = require('url') , fs = require('fs') , socketio = require('socket.io') , sys = require('sys') , settings = require('./settings') , db = require('./db') , async = require('async'); require('joose'); async.waterfall([ function (callback) { db.init(callback); }, function (callback) { var server = http.createServer(function(req, res){ var path = url.parse(req.url).pathname; if(path.substring(0,"/static".length) == "/static" || path.substring(0,"/p/".length) == "/p/") { if(path.substring(0,"/p/".length) == "/p/") { if(path.length < 7) send404(res, path); path = "/static/padhtml"; } sendFile(res, path, __dirname + "/.." + path); } else if(path == "/") { sendRedirect(res, path, "/p/test"); } else if(path == "/newpad") { sendRedirect(res, path, "/p/" + randomPadName()); } else if(path == "/ep/pad/reconnect") { if(req.headers.referer != null) sendRedirect(res, path, req.headers.referer); else send404(res, path); } else { send404(res, path); } }); server.listen(settings.port); console.log("Server is listening at port " + settings.port); var io = socketio.listen(server); var messageHandler = require("./MessageHandler"); messageHandler.setSocketIO(io); io.on('connection', function(client){ try{ messageHandler.handleConnect(client); }catch(e){errorlog(e);} client.on('message', function(message){ try{ messageHandler.handleMessage(client, message); }catch(e){errorlog(e);} }); client.on('disconnect', function(){ try{ messageHandler.handleDisconnect(client); }catch(e){errorlog(e);} }); }); callback(null); } ]); function randomPadName() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_length = 10; var randomstring = ''; for (var i=0; i " + path); } }); } function send404(res, reqPath) { res.writeHead(404); res.write("404 - Not Found"); res.end(); requestLog(404, reqPath, "NOT FOUND!"); } function sendRedirect(res, reqPath, location) { res.writeHead(302, {'Location': location}); res.end(); requestLog(302, reqPath, "-> " + location); } function requestLog(code, path, desc) { console.log(code +", " + path + ", " + desc); } function errorlog(e) { var timeStr = new Date().toUTCString() + ": "; if(typeof e == "string") { console.error(timeStr + e); } else if(e.stack != null) { console.error(timeStr + e.stack); } else { console.error(timeStr + JSON.stringify(e)); } }