// Generated by CoffeeScript 1.8.0 var HttpChannelHandler, Version, channelManager, checkForDeath, checkHost, deathTimeout, dns, dumpingHandler, express, fs, getStaticWebDir, getVersion, jsonBodyParser, net, path, processOptions, run2, serviceManager, startDeathWatcher, startServer, utils, _; fs = require('fs'); net = require('net'); dns = require('dns'); path = require('path'); _ = require('underscore'); express = require('express'); utils = require('./utils'); jsonBodyParser = require('./jsonBodyParser'); HttpChannelHandler = require('./HttpChannelHandler'); dumpingHandler = require('./dumpingHandler'); channelManager = require('./channelManager'); serviceManager = require('./serviceManager'); exports.run = function(options) { return processOptions(options, run2); }; run2 = function() { var options; options = utils.options; serviceManager.registerProxyClass('WeinreClientEvents'); serviceManager.registerProxyClass('WeinreTargetEvents'); serviceManager.registerLocalClass('WeinreClientCommands'); serviceManager.registerLocalClass('WeinreTargetCommands'); startDeathWatcher(options.deathTimeout); return startServer(); }; processOptions = function(options, cb) { var name, nameLen, names, reducer, _i, _len; options.httpPort = utils.ensureInteger(options.httpPort, 'the value of the option httpPort is not a number'); options.boundHost = utils.ensureString(options.boundHost, 'the value of the option boundHost is not a string'); options.verbose = utils.ensureBoolean(options.verbose, 'the value of the option verbose is not a boolean'); options.debug = utils.ensureBoolean(options.debug, 'the value of the option debug is not a boolean'); options.readTimeout = utils.ensureInteger(options.readTimeout, 'the value of the option readTimeout is not a number'); options.deathTimeout = utils.ensureInteger(options.deathTimeout, 'the value of the option deathTimeout is not a number'); if (options.debug) { options.verbose = true; } options.staticWebDir = getStaticWebDir(); utils.logVerbose("pid: " + process.pid); utils.logVerbose("version: " + (getVersion())); utils.logVerbose("node versions:"); names = _.keys(process.versions); reducer = function(memo, name) { return Math.max(memo, name.length); }; nameLen = _.reduce(names, reducer, 0); for (_i = 0, _len = names.length; _i < _len; _i++) { name = names[_i]; utils.logVerbose(" " + (utils.alignLeft(name, nameLen)) + ": " + process.versions[name]); } utils.logVerbose("options:"); utils.logVerbose(" httpPort: " + options.httpPort); utils.logVerbose(" boundHost: " + options.boundHost); utils.logVerbose(" verbose: " + options.verbose); utils.logVerbose(" debug: " + options.debug); utils.logVerbose(" readTimeout: " + options.readTimeout); utils.logVerbose(" deathTimeout: " + options.deathTimeout); utils.setOptions(options); return checkHost(options.boundHost, function(err) { if (err) { utils.exit("unable to resolve boundHost address: " + options.boundHost); } return cb(); }); }; checkHost = function(hostName, cb) { if (hostName === '-all-') { return cb(); } if (hostName === 'localhost') { return cb(); } if (net.isIP(hostName)) { return cb(); } return dns.lookup(hostName, cb); }; deathTimeout = null; startDeathWatcher = function(timeout) { deathTimeout = utils.options.deathTimeout * 1000; return setInterval(checkForDeath, 1000); }; checkForDeath = function() { var channel, now, _i, _len, _ref, _results; now = (new Date).valueOf(); _ref = channelManager.getChannels(); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { channel = _ref[_i]; if (now - channel.lastRead > deathTimeout) { _results.push(channel.close()); } else { _results.push(void 0); } } return _results; }; startServer = function() { var app, clientHandler, favIcon, options, staticCacheOptions, targetHandler; options = utils.options; clientHandler = new HttpChannelHandler('/ws/client'); targetHandler = new HttpChannelHandler('/ws/target'); channelManager.initialize(); favIcon = "" + options.staticWebDir + "/images/weinre-icon-32x32.png"; staticCacheOptions = { maxObjects: 500, maxLength: 32 * 1024 * 1024 }; app = express.createServer(); app.on('error', function(error) { return utils.exit("error running server: " + error); }); app.use(express.favicon(favIcon)); app.use(jsonBodyParser()); app.all(/^\/ws\/client(.*)/, function(request, response, next) { var uri; uri = request.params[0]; if (uri === '') { uri = '/'; } if (options.debug) { dumpingHandler(request, response, uri); } return clientHandler.handle(request, response, uri); }); app.all(/^\/ws\/target(.*)/, function(request, response, next) { var uri; uri = request.params[0]; if (uri === '') { uri = '/'; } if (options.debug) { dumpingHandler(request, response, uri); } return targetHandler.handle(request, response, uri); }); app.use(express.errorHandler({ dumpExceptions: true })); app.use(express.staticCache(staticCacheOptions)); app.use(express["static"](options.staticWebDir)); if (options.boundHost === '-all-') { utils.log("starting server at http://localhost:" + options.httpPort); return app.listen(options.httpPort); } else { utils.log("starting server at http://" + options.boundHost + ":" + options.httpPort); return app.listen(options.httpPort, options.boundHost); } }; getStaticWebDir = function() { var webDir; webDir = path.normalize(path.join(__dirname, '../web')); if (utils.fileExistsSync(webDir)) { return webDir; } return utils.exit('unable to find static files to serve in #{webDir}; did you do a build?'); }; Version = null; getVersion = exports.getVersion = function() { var json, packageJsonName, values; if (Version) { return Version; } packageJsonName = path.join(path.dirname(fs.realpathSync(__filename)), '../package.json'); json = fs.readFileSync(packageJsonName, 'utf8'); values = JSON.parse(json); Version = values.version; return Version; };