UNPKG

1.53 kBJavaScriptView Raw
1let request = require('request')
2let route = require('./route')
3let async = require('async')
4let _mdns = require('./mdns')
5
6// NOTE:
7// `initCmd` needs to be called whenever mdns is involved.
8// It creates a `route` for mdns packets -> interface
9// and hooks up listeners to remove this route when app exits.
10export function initCmd(args) {
11 // Prevent app from closing immediately
12 process.stdin.resume()
13 // exitHandler
14 function exitHandler(err) {
15 route.del(args, () => {
16 console.error(err)
17 process.exit()
18 })
19 }
20
21 // Call exitHandler on exit
22 process.on('exit', exitHandler)
23 process.on('SIGINT', exitHandler)
24 process.on('uncaughtException', exitHandler)
25
26 // Add route
27 route.add(args)
28}
29
30let defaultOptions = [
31 {
32 name: 'interface',
33 help: 'Which interface to use (required)'
34 }
35]
36export { defaultOptions }
37
38export function validateArgs(args) {
39 if (!args.interface) {
40 console.log('Missing required argument `interface`. Exiting...')
41 process.exit(1)
42 }
43}
44
45export 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}