UNPKG

@signalk/streams

Version:

Utilities for handling streams of Signal K data

56 lines (55 loc) 1.97 kB
"use strict"; 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;