1 | let request = require('request')
|
2 | let route = require('./route')
|
3 | let async = require('async')
|
4 | let _mdns = require('./mdns')
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | export function initCmd(args) {
|
11 |
|
12 | process.stdin.resume()
|
13 |
|
14 | function exitHandler(err) {
|
15 | route.del(args, () => {
|
16 | console.error(err)
|
17 | process.exit()
|
18 | })
|
19 | }
|
20 |
|
21 |
|
22 | process.on('exit', exitHandler)
|
23 | process.on('SIGINT', exitHandler)
|
24 | process.on('uncaughtException', exitHandler)
|
25 |
|
26 |
|
27 | route.add(args)
|
28 | }
|
29 |
|
30 | let defaultOptions = [
|
31 | {
|
32 | name: 'interface',
|
33 | help: 'Which interface to use (required)'
|
34 | }
|
35 | ]
|
36 | export { defaultOptions }
|
37 |
|
38 | export function validateArgs(args) {
|
39 | if (!args.interface) {
|
40 | console.log('Missing required argument `interface`. Exiting...')
|
41 | process.exit(1)
|
42 | }
|
43 | }
|
44 |
|
45 | export function querySwarmNodes(callback, args, queryTime) {
|
46 | queryTime = queryTime || 5000
|
47 | let mdns = _mdns.default(args)
|
48 | _mdns.onResponse(mdns, (answers) => {
|
49 | async.map(answers, (a, cb) => {
|
50 | request(`http://${a.data}:8901`, (err, res, body) => {
|
51 | if (res.statusCode != 200) return cb(err, a)
|
52 | let info = JSON.parse(body)
|
53 | info.ip = a.data
|
54 | cb(err, info)
|
55 | })
|
56 | }, (err, res) => {
|
57 | mdns.destroy()
|
58 | callback(err, res)
|
59 | })
|
60 | }, queryTime)
|
61 | _mdns.query(mdns)
|
62 | }
|