1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | var path = require('path');
|
7 |
|
8 | var closure = require('closure-util');
|
9 | var nomnom = require('nomnom');
|
10 |
|
11 | var log = closure.log;
|
12 | var name = path.basename(__filename, '.js');
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | var createServer = exports.createServer = function(callback) {
|
19 | var server;
|
20 | var manager = new closure.Manager({
|
21 | lib: [
|
22 | 'src/**/*.js',
|
23 | 'build/ol.ext/*.js'
|
24 | ],
|
25 | cwd: path.join(__dirname, '..')
|
26 | });
|
27 | manager.on('error', function(err) {
|
28 | if (server) {
|
29 | log.error('serve', err.message);
|
30 | } else {
|
31 | callback(err);
|
32 | }
|
33 | });
|
34 | manager.on('ready', function() {
|
35 | server = new closure.Server({
|
36 | manager: manager,
|
37 | loader: '/loader.js'
|
38 | });
|
39 | callback(null, server);
|
40 | });
|
41 | };
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | function listen(min, max, server, callback) {
|
51 | function _listen(port) {
|
52 | server.once('error', function(err) {
|
53 | if (err.code === 'EADDRINUSE') {
|
54 | log.warn(name, 'Port %d in use, trying next one', port);
|
55 | ++port;
|
56 | if (port < max) {
|
57 | _listen(port);
|
58 | } else {
|
59 | callback(new Error('Could not find an open port'));
|
60 | }
|
61 | } else {
|
62 | callback(err);
|
63 | }
|
64 | });
|
65 | server.listen(port);
|
66 | }
|
67 | server.once('listening', function() {
|
68 | callback(null);
|
69 | });
|
70 | _listen(min);
|
71 | }
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | if (require.main === module) {
|
77 | var options = nomnom.options({
|
78 | port: {
|
79 | abbr: 'p',
|
80 | default: 3000,
|
81 | help: 'Port for incoming connections (will try additional ports if used)',
|
82 | metavar: 'PORT'
|
83 | },
|
84 | loglevel: {
|
85 | abbr: 'l',
|
86 | choices: ['silly', 'verbose', 'info', 'warn', 'error'],
|
87 | default: 'info',
|
88 | help: 'Log level',
|
89 | metavar: 'LEVEL'
|
90 | }
|
91 | }).parse();
|
92 |
|
93 |
|
94 | log.level = options.loglevel;
|
95 |
|
96 | log.info(name, 'Parsing dependencies.');
|
97 | createServer(function(err, server) {
|
98 | if (err) {
|
99 | log.error(name, 'Parsing failed');
|
100 | log.error(name, err.message);
|
101 | process.exit(1);
|
102 | }
|
103 | listen(options.port, options.port + 4, server, function(err) {
|
104 | if (err) {
|
105 | log.error(name, 'Server failed to start: ' + err.message);
|
106 | process.exit(1);
|
107 | }
|
108 | log.info(name, 'Debug server running http://localhost:' +
|
109 | server.address().port + '/loader.js (Ctrl+C to stop)');
|
110 | });
|
111 | });
|
112 |
|
113 | }
|