netbeast-cli
Version:
Netbeast OS dashboard, IoT apps manager
65 lines (55 loc) • 1.92 kB
JavaScript
var dgram = require('dgram')
var client = dgram.createSocket('udp4')
var path = require('path')
var spawn = require('child_process').spawn
var env_tunnel = Object.create(process.env)
env_tunnel
.NETBEAST_PORT = process.env.PORT
.SERVER_IP = process.env.SERVER_IP
const DASHBOARD_TUNNEL = path.join(__dirname, './tunnel-c.js')
console.log('[tunnel] Server ' + process.env.SERVER_IP + ':' + process.env.IAMALIVE_SPORT)
console.log('[tunnel] 📡 Sending:' + process.env.IAMALIVE_SPORT + ' to ' + process.env.SERVER_IP)
setInterval(function () {
require('getmac').getMac(function (err, macAddress) {
if (err) throw err
var msg = new Buffer(macAddress)
client.send(msg, 0, msg.length, process.env.IAMALIVE_SPORT, process.env.SERVER_IP, function (err) {
if (err) {
throw err
}
// client.close()
})
})
}, 5000)
client.on('message', function (msg, rinfo) {
var remotePort = msg.toString()
console.log('[tunnel] client got: ' + remotePort + ' from ' + rinfo.address + ':' + rinfo.port)
if (parseInt(msg, 10) > 0) {
console.log()
// tunnel.start(remotePort)
env_tunnel.RELAY_PORT = remotePort
var tunnelOptions = { env: env_tunnel }
var tunnel = spawn(DASHBOARD_TUNNEL, tunnelOptions)
console.log('[tunnel] tunnel started')
/*
tunnel.stdout.on('data', function (data) {
console.log(data.toString())
})
tunnel.stderr.on('data', function (data) {
console.log(data.toString())
})
*/
tunnel.on('close', function (code) {
console.log('[tunnel] child process tunnel exited with code ' + code.toString())
})
process.on('exit', function () {
tunnel.kill('SIGTERM')
})
}
})
client.on('listening', function () {
var address = client.address()
console.log('[tunnel] client listening ' + address.address + ':' + address.port)
})
client.bind(process.env.IAMALIVE_CPORT)