1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- var http = require('http'),
- EventEmitter = require('events').EventEmitter,
- inherits = require('util').inherits,
- extend = require('util')._extend,
- path = require('path'),
- express = require('express'),
- WebSocketServer = require('ws').Server,
- Session = require('./session'),
- buildUrl = require('../index.js').buildInspectorUrl,
- WEBROOT = path.join(__dirname, '../front-end');
- function debugAction(req, res) {
- res.sendfile(path.join(WEBROOT, 'inspector.html'));
- }
- function overridesAction(req, res) {
- res.sendfile(path.join(__dirname, '../front-end-node/Overrides.js'));
- }
- function handleWebSocketConnection(socket) {
- var debugPort = this._getDebuggerPort(socket.upgradeReq.url);
- this._createSession(debugPort).join(socket);
- }
- function handleServerListening() {
- this.emit('listening');
- }
- function handleServerError(err) {
- if (err._handledByInspector) return;
- err._handledByInspector = true;
- this.emit('error', err);
- }
- function DebugServer() {}
- inherits(DebugServer, EventEmitter);
- DebugServer.prototype.start = function(options) {
- this._config = extend({}, options);
- var app = express();
- var httpServer = http.createServer(app);
- this._httpServer = httpServer;
- app.get('/debug', debugAction.bind(this));
- app.get('/node/Overrides.js', overridesAction);
- app.use(express.static(WEBROOT));
- this.wsServer = new WebSocketServer({
- server: httpServer
- });
- this.wsServer.on('connection', handleWebSocketConnection.bind(this));
- this.wsServer.on('error', handleServerError.bind(this));
- httpServer.on('listening', handleServerListening.bind(this));
- httpServer.on('error', handleServerError.bind(this));
- httpServer.listen(this._config.webPort, this._config.webHost);
- };
- DebugServer.prototype._getDebuggerPort = function(url) {
- return parseInt((/\?port=(\d+)/.exec(url) || [null, this._config.debugPort])[1], 10);
- };
- DebugServer.prototype._createSession = function(debugPort) {
- return Session.create(debugPort, this._config);
- };
- DebugServer.prototype.close = function() {
- if (this.wsServer) {
- this.wsServer.close();
- this.emit('close');
- }
- };
- DebugServer.prototype.address = function() {
- var address = this._httpServer.address();
- var config = this._config;
- address.url = buildUrl(config.webHost, address.port, config.debugPort);
- return address;
- };
- exports.DebugServer = DebugServer;
|