export class Server {
  include $m.EventEmitter;

  function initialize() {
    process.env['NODE_ENV'] = 'production';
    var mochiscript = require('mochiscript');
    var express = require('express')
      , routes = require('./routes')
      , http = require('http')
      , path = require('path');

    var app = express();
    var root = __dirname + '/..';
    this.multi = {};

    app.configure(#{
      app.set('views', root + '/views');
      app.set('view engine', 'jade');
      app.use(express.favicon());
      //app.use(express.logger('dev'));
      app.use(express.bodyParser());
      app.use(express.methodOverride());
      app.use(app.router);
      app.use(express.static(path.join(root, 'public')));

      app.use(mochiscript.middleware({ 
        src: path.join(root, "public", "javascripts"), 
        prefix: "javascripts"
      }));
    });

    app.configure('development', #{
      app.use(express.errorHandler());
    });

    app.get('/', routes.index);

    var server = http.createServer(app)
    this.server = server;
    this.app    = app;
  }

  function listen(port) {
    var io = require('socket.io').listen(this.server);

    this.server.listen(port);
    require('./sockets')(io, this);
  }

  function addSSH(name) {
    var ssh = new SSH({ name: name }); 
    return this.multi[name] = ssh;
  }

  function exec(cmd) {
    this.emit('exec', cmd);
  }

}
