sbp-synthetic-stream
Version:
Construct synthetic SBP position solution streams. Plays the stream(s) over a readable stream or HTTP.
74 lines (55 loc) • 2.73 kB
JavaScript
/**
* Copyright (C) 2016 Swift Navigation Inc.
* Contact: Joshua Gross <josh@swift-nav.com>
* This source is subject to the license found in the file 'LICENSE' which must
* be distributed together with this source. All other rights reserved.
*
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
*/
;
var _http = require('http');
var _http2 = _interopRequireDefault(_http);
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _parseDuration = require('parse-duration');
var _parseDuration2 = _interopRequireDefault(_parseDuration);
var _index = require('./index');
var _index2 = _interopRequireDefault(_index);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function parsePorts(s) {
return s.split(',').map(function (d) {
return parseInt(d);
});
}
function parseLLAs(s) {
return s.split(';').map(function (llaStr) {
var llaStrSplit = llaStr.split(',');
var lat = parseFloat(llaStrSplit[0]);
var lng = parseFloat(llaStrSplit[1]);
var alt = parseFloat(llaStrSplit[2]);
var latPole = llaStrSplit[0][llaStrSplit[0].length - 1];
var lngPole = llaStrSplit[1][llaStrSplit[1].length - 1];
return new _index.LLA(lat, latPole, lng, lngPole, alt);
});
}
_commander2.default.version(_index2.default.version).option('-s, --path <p1,p2,p3>', 'Points to interpolate between, semicolon-separated, in LLA format: lat, long, altitude (meters)', parseLLAs).option('-p, --ports <p1,p2,p3>', 'Port(s) to open HTTP server on local machine, comma-separated', parsePorts).option('-n, --num-streams <n>', 'Number of SBP streams', parseInt).option('-z, --hz <n>', 'Speed in hertz of updates', parseInt).option('-d, --duration <s>', 'Time to finish streams', _parseDuration2.default).parse(process.argv);
var streams = (0, _index2.default)(_commander2.default.path, _commander2.default.numStreams, _commander2.default.hz, _commander2.default.duration);
// Start up optional HTTP streams
var _loop = function _loop(i) {
var port = _commander2.default.ports[i];
var stream = streams[i];
var responder = function responder(req, res) {
stream.pipe(res);
};
var server = _http2.default.createServer(responder).listen(port);
// `finish` is called because `.end` is called on the stream.
stream.on('finish', function () {
return server.close();
});
};
for (var i = 0; i < (_commander2.default.ports && _commander2.default.ports.length || 0); i++) {
_loop(i);
}