/
cncjs-pendant-boilerplate
executable file
·97 lines (85 loc) · 2.77 KB
/
cncjs-pendant-boilerplate
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env node
var program = require('commander');
var serialport = require('serialport');
var inquirer = require('inquirer');
var vorpal = require('vorpal')();
var pkg = require('../package.json');
var serverMain = require('../index');
var options = {};
program
.version(pkg.version)
.usage('-s <secret> -p <port> [options]')
.option('-l, --list', 'list available ports then exit')
.option('-s, --secret', 'the secret key stored in the ~/.cncrc file')
.option('-p, --port <port>', 'path or name of serial port')
.option('-b, --baudrate <baudrate>', 'baud rate (default: 115200)', 115200)
.option('--socket-address <address>', 'socket address or hostname (default: localhost)', 'localhost')
.option('--socket-port <port>', 'socket port (default: 8000)', 8000)
.option('--controller-type <type>', 'controller type: Grbl|Smoothie|TinyG (default: Grbl)', 'Grbl')
.option('--access-token-lifetime <lifetime>', 'access token lifetime in seconds or a time span string (default: 30d)', '30d')
program.parse(process.argv);
var options = {
secret: program.secret,
port: program.port,
baudrate: program.baudrate,
socketAddress: program.socketAddress,
socketPort: program.socketPort,
controllerType: program.controllerType,
accessTokenLifetime: program.accessTokenLifetime
};
if (options.list) {
serialport.list(function(err, ports) {
if (err) {
console.error(err);
process.exit(1);
}
ports.forEach(function(port) {
console.log(port.comName);
});
});
return;
}
var createServer = function(options) {
serverMain(options, function(err, socket) {
vorpal
.mode('command')
.description('Enters the command-line mode.')
.delimiter(options.controllerType + '>')
.init(function(args, callback) {
this.log('You can now directly enter commands. To exit, type `exit`.');
callback();
})
.action(function(command, callback) {
var line = command + '\n';
socket.emit('write', options.port, line);
callback();
});
console.log('');
console.log('Type "help" to display supported options:');
vorpal
.delimiter('pendant$')
.show();
});
};
if (options.port) {
createServer(options);
return;
}
serialport.list(function(err, ports) {
if (err) {
console.error(err);
process.exit(1);
}
const choices = ports.map(function(port) {
return port.comName;
});
inquirer.prompt([{
type: 'list',
name: 'port',
message: 'Specify which port you want to use?',
choices: choices
}]).then(function(answers) {
options.port = answers.port;
createServer(options);
});
});