84 строки
2.3 KiB
JavaScript
84 строки
2.3 KiB
JavaScript
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;
|