/
debug-server.js
65 lines (57 loc) · 1.73 KB
/
debug-server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
var Http = require('http'),
EventEmitter = require('events').EventEmitter,
path = require('path'),
WebSocket = require('../vendor/ws'),
paperboy = require('../vendor/paperboy'),
Session = require('./session');
var WEBROOT = path.join(__dirname, '../front-end');
function staticFile(req, res) {
req.url = req.url.replace(/^\/debug/, '/');
paperboy.deliver(WEBROOT, req, res);
}
function override(options, defaults) {
var result = {};
Object.keys(defaults).forEach(function (key) {
result[key] = options[key] || defaults[key];
});
return result;
}
exports.create = function(options, config) {
var defaults = { webPort: config.webPort },
settings = override(options || {}, defaults),
httpServer = Http.createServer(staticFile),
wsServer = WebSocket.createServer({server: httpServer}),
debugPort = config.debugPort.toString();
wsServer.on('connection', function (conn) {
var port = parseInt((/\?port=(\d+)/.exec(conn._req.url) || [null,debugPort])[1], 10),
session = Session.create(conn, port, config);
conn.on('message', function (data) {
session.handleRequest(data);
});
conn.on('close', function () {
session.close();
console.log('connection closed');
});
});
wsServer.listen(settings.webPort);
wsServer.on('listening', function(){
console.log(
'visit http://0.0.0.0:' +
settings.webPort +
'/debug?port=5858 to start debugging');
});
return Object.create(EventEmitter.prototype, {
close: {
value: function ()
{
if (wsServer) {
wsServer.close();
}
this.emit('close');
}
},
webPort: {
get: function () { return settings.webPort; }
}
});
};