@signalk/streams
Version:
Utilities for handling streams of Signal K data
56 lines (55 loc) • 1.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("stream");
const node_gpsd_client_1 = __importDefault(require("node-gpsd-client"));
class Gpsd extends stream_1.Transform {
listener;
constructor(options) {
super({ objectMode: true });
const port = options.port ?? 2947;
const hostname = options.hostname ?? options.host ?? 'localhost';
const noDataReceivedTimeout = options.noDataReceivedTimeout ?? 0;
const setProviderStatus = (msg) => {
options.app.setProviderStatus(options.providerId, msg);
};
const createDebug = options.createDebug ?? require('debug');
this.listener = new node_gpsd_client_1.default({
port,
hostname,
logger: {
info: createDebug('signalk:streams:gpsd'),
warn: console.warn,
error: (msg) => {
options.app.setProviderError(options.providerId, `${hostname}:${port}: ` + msg);
}
},
parse: false,
reconnectThreshold: noDataReceivedTimeout,
reconnectInterval: noDataReceivedTimeout / 2
});
setProviderStatus(`Connecting to ${hostname}:${port}`);
this.listener.on('connected', () => {
setProviderStatus(`Connected to ${hostname}:${port}`);
this.listener.watch({
class: 'WATCH',
nmea: true,
json: false
});
});
this.listener.on('raw', (data) => {
this.push(data);
});
this.listener.connect();
}
end() {
this.listener.disconnect();
return this;
}
_transform(chunk, encoding, done) {
done();
}
}
exports.default = Gpsd;