@canboat/canboatjs 3.19.0-beta.1 → 3.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/n2kDevice.d.ts.map +1 -1
- package/dist/n2kDevice.js +58 -5
- package/dist/n2kDevice.js.map +1 -1
- package/dist/n2kDevice.test.d.ts +2 -0
- package/dist/n2kDevice.test.d.ts.map +1 -0
- package/dist/n2kDevice.test.js +154 -0
- package/dist/n2kDevice.test.js.map +1 -0
- package/dist/n2kIpGateway.d.ts +40 -0
- package/dist/n2kIpGateway.d.ts.map +1 -0
- package/dist/n2kIpGateway.js +464 -0
- package/dist/n2kIpGateway.js.map +1 -0
- package/dist/n2kIpGateway.test.d.ts +2 -0
- package/dist/n2kIpGateway.test.d.ts.map +1 -0
- package/dist/n2kIpGateway.test.js +349 -0
- package/dist/n2kIpGateway.test.js.map +1 -0
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2025 Scott Bender <scott@scottbender.net>
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.N2kIpGateway = N2kIpGateway;
|
|
22
|
+
const stream_1 = require("stream");
|
|
23
|
+
const net_1 = __importDefault(require("net"));
|
|
24
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
25
|
+
const util_1 = __importDefault(require("util"));
|
|
26
|
+
const candevice_1 = require("./candevice");
|
|
27
|
+
const canId_1 = require("./canId");
|
|
28
|
+
const toPgn_1 = require("./toPgn");
|
|
29
|
+
const stringMsg_1 = require("./stringMsg");
|
|
30
|
+
const utilities_1 = require("./utilities");
|
|
31
|
+
const DEFAULT_PORT = 2599;
|
|
32
|
+
const DEFAULT_RECONNECT_MS = 5000;
|
|
33
|
+
const DEFAULT_FORMAT = 'candump3';
|
|
34
|
+
// Anything before 2000-01-01 UTC is treated as the device's uptime clock,
|
|
35
|
+
// not wall-clock time, and dropped so the downstream analyzer can fall
|
|
36
|
+
// back to `new Date()`. This is needed because devices like the SensESP
|
|
37
|
+
// candump gateway fall back to uptime when their RTC has not been synced
|
|
38
|
+
// (no NTP yet), and stamping deltas with 1970-01-01 + uptime ends up in
|
|
39
|
+
// historical timeseries databases as either way-future or way-past rows.
|
|
40
|
+
const MIN_VALID_TIMESTAMP_MS = Date.UTC(2000, 0, 1);
|
|
41
|
+
// Convert a candump3-style "(sec.usec)" or "(sec.usec) " timestamp into an
|
|
42
|
+
// ISO-8601 string. Returns undefined if the input doesn't look like a
|
|
43
|
+
// candump epoch timestamp, or if the value clearly comes from a device
|
|
44
|
+
// whose clock has not been set — the caller should drop the field in
|
|
45
|
+
// either case.
|
|
46
|
+
function candumpTimestampToIso(ts) {
|
|
47
|
+
const m = /^\(?(\d+)(?:\.(\d+))?\)?$/.exec(ts);
|
|
48
|
+
if (!m)
|
|
49
|
+
return undefined;
|
|
50
|
+
const sec = Number(m[1]);
|
|
51
|
+
if (!Number.isFinite(sec))
|
|
52
|
+
return undefined;
|
|
53
|
+
// Pad the fractional part to microseconds so we always interpret it as such.
|
|
54
|
+
const usec = m[2] ? Number(m[2].slice(0, 6).padEnd(6, '0')) : 0;
|
|
55
|
+
if (!Number.isFinite(usec))
|
|
56
|
+
return undefined;
|
|
57
|
+
const ms = sec * 1000 + Math.floor(usec / 1000);
|
|
58
|
+
if (ms < MIN_VALID_TIMESTAMP_MS)
|
|
59
|
+
return undefined;
|
|
60
|
+
const d = new Date(ms);
|
|
61
|
+
if (Number.isNaN(d.getTime()))
|
|
62
|
+
return undefined;
|
|
63
|
+
return d.toISOString();
|
|
64
|
+
}
|
|
65
|
+
function encodeCandump3Line(pgn, _canid, buffer) {
|
|
66
|
+
return (0, stringMsg_1.encodeCandump3)({
|
|
67
|
+
data: buffer,
|
|
68
|
+
pgn: pgn.pgn,
|
|
69
|
+
src: pgn.src,
|
|
70
|
+
dst: pgn.dst,
|
|
71
|
+
prio: pgn.prio
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function encodeCandump2Line(pgn, _canid, buffer) {
|
|
75
|
+
return (0, stringMsg_1.encodeCandump2)({
|
|
76
|
+
data: buffer,
|
|
77
|
+
pgn: pgn.pgn,
|
|
78
|
+
src: pgn.src,
|
|
79
|
+
dst: pgn.dst,
|
|
80
|
+
prio: pgn.prio
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function encodeCandump1Line(pgn, _canid, buffer) {
|
|
84
|
+
return (0, stringMsg_1.encodeCandump1)({
|
|
85
|
+
data: buffer,
|
|
86
|
+
pgn: pgn.pgn,
|
|
87
|
+
src: pgn.src,
|
|
88
|
+
dst: pgn.dst,
|
|
89
|
+
prio: pgn.prio
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function encodeYDRAWLine(pgn, _canid, buffer) {
|
|
93
|
+
return (0, stringMsg_1.encodeYDRAW)({
|
|
94
|
+
data: buffer,
|
|
95
|
+
pgn: pgn.pgn,
|
|
96
|
+
src: pgn.src,
|
|
97
|
+
dst: pgn.dst,
|
|
98
|
+
prio: pgn.prio
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function encodeActisenseLine(pgn, _canid, _buffer) {
|
|
102
|
+
// Actisense format carries the entire (possibly long) PGN payload — no
|
|
103
|
+
// fast-packet split needed. The caller passes the full unsplit buffer.
|
|
104
|
+
return (0, toPgn_1.pgnToN2KActisenseFormat)(pgn);
|
|
105
|
+
}
|
|
106
|
+
function encodeActisenseN2KAsciiLine(pgn, _canid, _buffer) {
|
|
107
|
+
return (0, toPgn_1.pgnToActisenseN2KAsciiFormat)(pgn);
|
|
108
|
+
}
|
|
109
|
+
function encodePCDINLine(pgn, _canid, buffer) {
|
|
110
|
+
return (0, stringMsg_1.encodePCDIN)({
|
|
111
|
+
pgn: pgn.pgn,
|
|
112
|
+
data: buffer,
|
|
113
|
+
src: pgn.src,
|
|
114
|
+
dst: pgn.dst,
|
|
115
|
+
prio: pgn.prio
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const FORMATS = {
|
|
119
|
+
candump3: {
|
|
120
|
+
parse: stringMsg_1.parseCandump3,
|
|
121
|
+
encode: encodeCandump3Line,
|
|
122
|
+
splitFastPacket: true,
|
|
123
|
+
terminator: '\n'
|
|
124
|
+
},
|
|
125
|
+
candump2: {
|
|
126
|
+
parse: stringMsg_1.parseCandump2,
|
|
127
|
+
encode: encodeCandump2Line,
|
|
128
|
+
splitFastPacket: true,
|
|
129
|
+
terminator: '\n'
|
|
130
|
+
},
|
|
131
|
+
candump1: {
|
|
132
|
+
parse: stringMsg_1.parseCandump1,
|
|
133
|
+
encode: encodeCandump1Line,
|
|
134
|
+
splitFastPacket: true,
|
|
135
|
+
terminator: '\n'
|
|
136
|
+
},
|
|
137
|
+
ydraw: {
|
|
138
|
+
parse: stringMsg_1.parseYDRAW,
|
|
139
|
+
encode: encodeYDRAWLine,
|
|
140
|
+
splitFastPacket: true,
|
|
141
|
+
terminator: '\r\n'
|
|
142
|
+
},
|
|
143
|
+
actisense: {
|
|
144
|
+
parse: stringMsg_1.parseActisense,
|
|
145
|
+
encode: encodeActisenseLine,
|
|
146
|
+
splitFastPacket: false,
|
|
147
|
+
terminator: '\r\n'
|
|
148
|
+
},
|
|
149
|
+
'actisense-n2k-ascii': {
|
|
150
|
+
parse: stringMsg_1.parseActisenseN2KASCII,
|
|
151
|
+
encode: encodeActisenseN2KAsciiLine,
|
|
152
|
+
splitFastPacket: false,
|
|
153
|
+
terminator: '\r\n'
|
|
154
|
+
},
|
|
155
|
+
pcdin: {
|
|
156
|
+
parse: stringMsg_1.parsePCDIN,
|
|
157
|
+
encode: encodePCDINLine,
|
|
158
|
+
splitFastPacket: false,
|
|
159
|
+
terminator: '\r\n'
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
function N2kIpGateway(options) {
|
|
163
|
+
if (this === undefined) {
|
|
164
|
+
return new N2kIpGateway(options);
|
|
165
|
+
}
|
|
166
|
+
stream_1.Transform.call(this, { objectMode: true });
|
|
167
|
+
if (!options || !options.host) {
|
|
168
|
+
throw new Error('N2kIpGateway: options.host is required');
|
|
169
|
+
}
|
|
170
|
+
this.options = options;
|
|
171
|
+
this.host = options.host;
|
|
172
|
+
this.port = options.port ?? DEFAULT_PORT;
|
|
173
|
+
this.reconnectIntervalMs = options.reconnectIntervalMs ?? DEFAULT_RECONNECT_MS;
|
|
174
|
+
const fmt = (options.format ?? DEFAULT_FORMAT);
|
|
175
|
+
if (!FORMATS[fmt]) {
|
|
176
|
+
throw new Error(`N2kIpGateway: unsupported format "${fmt}"`);
|
|
177
|
+
}
|
|
178
|
+
this.format = fmt;
|
|
179
|
+
this.formatSpec = FORMATS[fmt];
|
|
180
|
+
// Default is "be a CAN device" — matches the user's KISS expectation.
|
|
181
|
+
this.actAsCanDevice = options.actAsCanDevice ?? true;
|
|
182
|
+
this.debug = (0, utilities_1.createDebug)('canboatjs:n2k-ip-gateway', options);
|
|
183
|
+
this.debugData = (0, utilities_1.createDebug)('canboatjs:n2k-ip-gateway-data', options);
|
|
184
|
+
this.debugOut = (0, utilities_1.createDebug)('canboatjs:n2k-out', options);
|
|
185
|
+
this.plainText = false;
|
|
186
|
+
this.rxBuffer = '';
|
|
187
|
+
this.reconnecting = false;
|
|
188
|
+
this.stopping = false;
|
|
189
|
+
this.sentAvailable = false;
|
|
190
|
+
this.setProviderStatus =
|
|
191
|
+
options.app && options.app.setProviderStatus
|
|
192
|
+
? (msg) => options.app.setProviderStatus(options.providerId, msg)
|
|
193
|
+
: () => { };
|
|
194
|
+
this.setProviderError =
|
|
195
|
+
options.app && options.app.setProviderError
|
|
196
|
+
? (msg) => options.app.setProviderError(options.providerId, msg)
|
|
197
|
+
: () => { };
|
|
198
|
+
if (options.app) {
|
|
199
|
+
const outEvents = (options.outEvent || 'nmea2000out')
|
|
200
|
+
.split(',')
|
|
201
|
+
.map((event) => event.trim());
|
|
202
|
+
outEvents.forEach((event) => {
|
|
203
|
+
options.app.on(event, (msg) => {
|
|
204
|
+
this.sendPGN(msg, false);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
const jsonOutEvents = (options.jsonOutEvent || 'nmea2000JsonOut')
|
|
208
|
+
.split(',')
|
|
209
|
+
.map((event) => event.trim());
|
|
210
|
+
jsonOutEvents.forEach((event) => {
|
|
211
|
+
options.app.on(event, (msg) => {
|
|
212
|
+
this.sendPGN(msg, false);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
this.connect();
|
|
217
|
+
}
|
|
218
|
+
util_1.default.inherits(N2kIpGateway, stream_1.Transform);
|
|
219
|
+
N2kIpGateway.prototype.connect = function () {
|
|
220
|
+
if (this.reconnecting || this.stopping) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.reconnecting = true;
|
|
224
|
+
this.debug(`connecting to ${this.host}:${this.port}`);
|
|
225
|
+
const socket = new net_1.default.Socket();
|
|
226
|
+
this.socket = socket;
|
|
227
|
+
const onError = (err) => {
|
|
228
|
+
this.debug(`socket error: ${err.message}`);
|
|
229
|
+
this.setProviderError(err.message);
|
|
230
|
+
};
|
|
231
|
+
const onClose = () => {
|
|
232
|
+
this.debug('socket closed');
|
|
233
|
+
if (this.candevice) {
|
|
234
|
+
try {
|
|
235
|
+
this.candevice.stop();
|
|
236
|
+
}
|
|
237
|
+
catch (_e) {
|
|
238
|
+
// best-effort cleanup
|
|
239
|
+
}
|
|
240
|
+
this.candevice = undefined;
|
|
241
|
+
}
|
|
242
|
+
this.socket = undefined;
|
|
243
|
+
this.reconnecting = false;
|
|
244
|
+
if (!this.stopping) {
|
|
245
|
+
this.setProviderError('disconnected, reconnecting...');
|
|
246
|
+
this.reconnectTimer = setTimeout(() => this.connect(), this.reconnectIntervalMs);
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
socket.on('error', onError);
|
|
250
|
+
socket.on('close', onClose);
|
|
251
|
+
socket.on('data', (chunk) => this._onData(chunk));
|
|
252
|
+
socket.connect(this.port, this.host, () => {
|
|
253
|
+
if (this.stopping || this.socket !== socket) {
|
|
254
|
+
// We were torn down (or replaced) before the connect callback fired —
|
|
255
|
+
// don't spin up a CanDevice whose timers would then leak.
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
this.debug(`connected to ${this.host}:${this.port}`);
|
|
259
|
+
this.setProviderStatus(`Connected to ${this.host}:${this.port}`);
|
|
260
|
+
this.reconnecting = false;
|
|
261
|
+
if (this.actAsCanDevice && this.options.app && !this.candevice) {
|
|
262
|
+
this.candevice = new candevice_1.CanDevice(this, this.options);
|
|
263
|
+
this.candevice.start();
|
|
264
|
+
}
|
|
265
|
+
if (!this.sentAvailable && this.options.app) {
|
|
266
|
+
this.options.app.emit('nmea2000OutAvailable');
|
|
267
|
+
this.sentAvailable = true;
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
N2kIpGateway.prototype._onData = function (chunk) {
|
|
272
|
+
this.rxBuffer += chunk.toString('utf8');
|
|
273
|
+
let nl;
|
|
274
|
+
while ((nl = this.rxBuffer.indexOf('\n')) >= 0) {
|
|
275
|
+
let line = this.rxBuffer.slice(0, nl);
|
|
276
|
+
this.rxBuffer = this.rxBuffer.slice(nl + 1);
|
|
277
|
+
if (line.endsWith('\r')) {
|
|
278
|
+
line = line.slice(0, -1);
|
|
279
|
+
}
|
|
280
|
+
if (line.length === 0)
|
|
281
|
+
continue;
|
|
282
|
+
this._handleLine(line);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
N2kIpGateway.prototype._handleLine = function (line) {
|
|
286
|
+
if (this.debugData.enabled) {
|
|
287
|
+
this.debugData(line);
|
|
288
|
+
}
|
|
289
|
+
let parsed;
|
|
290
|
+
try {
|
|
291
|
+
parsed = this.formatSpec.parse(line);
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
this.debug(`parse error (${this.format}): ${e.message}`);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (!parsed || parsed.error || !parsed.data) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
// parseXxx() returns a flat CanID-like object: { pgn, src, dst, prio, data }.
|
|
301
|
+
// Downstream consumers expect { pgn: <that object>, length, data }.
|
|
302
|
+
const data = parsed.data;
|
|
303
|
+
// Normalize the per-frame timestamp. parseCandump3() puts the raw
|
|
304
|
+
// "(<sec>.<usec>)" string in parsed.timestamp; downstream code that does
|
|
305
|
+
// `new Date(parsed.timestamp)` would get an Invalid Date and produce NaN
|
|
306
|
+
// when consumers (e.g. ILP writers) try to extract a numeric timestamp.
|
|
307
|
+
// Convert to an ISO string if we can, otherwise drop the field so the
|
|
308
|
+
// analyzer falls back to its own `new Date()`.
|
|
309
|
+
if (typeof parsed.timestamp === 'string') {
|
|
310
|
+
const iso = candumpTimestampToIso(parsed.timestamp);
|
|
311
|
+
if (iso) {
|
|
312
|
+
parsed.timestamp = iso;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
delete parsed.timestamp;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Drop frames we sent ourselves so we don't re-process loopback / echoed
|
|
319
|
+
// outbound traffic as if it were bus input.
|
|
320
|
+
if (this.candevice &&
|
|
321
|
+
this.candevice.cansend &&
|
|
322
|
+
parsed.src === this.candevice.address) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const out = { pgn: parsed, length: data.length, data };
|
|
326
|
+
if (this.options.app &&
|
|
327
|
+
this.options.app.listenerCount &&
|
|
328
|
+
this.options.app.listenerCount('canboatjs:rawoutput') > 0) {
|
|
329
|
+
this.options.app.emit('canboatjs:rawoutput', out);
|
|
330
|
+
}
|
|
331
|
+
this.push(out);
|
|
332
|
+
};
|
|
333
|
+
N2kIpGateway.prototype.send = function (line) {
|
|
334
|
+
if (!this.socket) {
|
|
335
|
+
this.debug('drop send: socket not connected');
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
this.debugOut('sending %s', line);
|
|
339
|
+
this.socket.write(line + this.formatSpec.terminator);
|
|
340
|
+
};
|
|
341
|
+
N2kIpGateway.prototype.sendPGN = function (msg, force) {
|
|
342
|
+
if (this.actAsCanDevice) {
|
|
343
|
+
if (!this.candevice) {
|
|
344
|
+
// Not connected yet — drop. The server will retry as needed.
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (!this.candevice.cansend && force !== true) {
|
|
348
|
+
// Address claim not yet completed; only CanDevice's own probes are
|
|
349
|
+
// allowed through with force=true.
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (this.options.app) {
|
|
354
|
+
this.options.app.emit('connectionwrite', {
|
|
355
|
+
providerId: this.options.providerId
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
let pgn;
|
|
359
|
+
if (lodash_1.default.isString(msg)) {
|
|
360
|
+
// Inbound message is in some text format. We accept it as-is when it
|
|
361
|
+
// already matches our wire format; otherwise reparse via Actisense (the
|
|
362
|
+
// canonical comma-delimited form used by signalk-server).
|
|
363
|
+
pgn = (0, stringMsg_1.parseActisense)(msg);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
pgn = msg;
|
|
367
|
+
if (lodash_1.default.isUndefined(pgn.prio))
|
|
368
|
+
pgn.prio = 3;
|
|
369
|
+
if (lodash_1.default.isUndefined(pgn.dst))
|
|
370
|
+
pgn.dst = 255;
|
|
371
|
+
if (this.actAsCanDevice && this.candevice && !pgn.forceSrc) {
|
|
372
|
+
pgn.src = this.candevice.address;
|
|
373
|
+
}
|
|
374
|
+
else if (lodash_1.default.isUndefined(pgn.src)) {
|
|
375
|
+
pgn.src = 0;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Prefer an already-encoded buffer when the caller supplied one — this lets
|
|
379
|
+
// upstream code forward frames that have already been serialized (e.g.
|
|
380
|
+
// verbatim relays from another analyzer) without re-encoding fields.
|
|
381
|
+
let buffer;
|
|
382
|
+
if (lodash_1.default.isString(msg)) {
|
|
383
|
+
buffer = pgn.data;
|
|
384
|
+
}
|
|
385
|
+
else if (Buffer.isBuffer(pgn.data)) {
|
|
386
|
+
buffer = pgn.data;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
buffer = (0, toPgn_1.toPgn)(pgn);
|
|
390
|
+
}
|
|
391
|
+
if (!buffer) {
|
|
392
|
+
this.debug("can't convert %j", msg);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
const canid = (0, canId_1.encodeCanId)(pgn);
|
|
396
|
+
let payloads;
|
|
397
|
+
if (this.formatSpec.splitFastPacket &&
|
|
398
|
+
(buffer.length > 8 || pgn.pgn === 126720)) {
|
|
399
|
+
payloads = (0, utilities_1.getPlainPGNs)(buffer);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
payloads = [buffer];
|
|
403
|
+
}
|
|
404
|
+
payloads.forEach((payload) => {
|
|
405
|
+
const encoded = this.formatSpec.encode(pgn, canid, payload);
|
|
406
|
+
const lines = Array.isArray(encoded) ? encoded : [encoded];
|
|
407
|
+
lines.forEach((line) => this.send(line));
|
|
408
|
+
if (this.options.app &&
|
|
409
|
+
this.options.app.listenerCount &&
|
|
410
|
+
this.options.app.listenerCount('canboatjs:rawsend') > 0) {
|
|
411
|
+
this.options.app.emit('canboatjs:rawsend', {
|
|
412
|
+
knownSrc: true,
|
|
413
|
+
data: { pgn, length: payload.length, data: (0, utilities_1.byteStringArray)(payload) }
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
// Forward self-emitted device info back into the analyzer pipe so the
|
|
417
|
+
// server sees its own address claim / product info / config info, the
|
|
418
|
+
// same way CanbusStream does. CRITICALLY this must be done once per
|
|
419
|
+
// per-frame `payload` (≤ 8 bytes), not once with the full reassembled
|
|
420
|
+
// buffer — handing a > 8 byte chunk to FromPgn flips the analyzer
|
|
421
|
+
// into FORMAT_COALESCED for the rest of the session and corrupts
|
|
422
|
+
// every subsequent fast-packet reassembly (e.g. AIS PGN 129038/9
|
|
423
|
+
// bytes get read at the wrong offset, producing phantom vessels).
|
|
424
|
+
if (pgn.pgn === 60928 || pgn.pgn === 126996 || pgn.pgn === 126998) {
|
|
425
|
+
this.push({ pgn, length: payload.length, data: payload });
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
};
|
|
429
|
+
N2kIpGateway.prototype._transform = function (_chunk, _encoding, done) {
|
|
430
|
+
done();
|
|
431
|
+
};
|
|
432
|
+
N2kIpGateway.prototype.pipe = function (pipeTo) {
|
|
433
|
+
if (!pipeTo.fromPgn) {
|
|
434
|
+
this.plainText = true;
|
|
435
|
+
}
|
|
436
|
+
return N2kIpGateway.super_.prototype.pipe.call(this, pipeTo);
|
|
437
|
+
};
|
|
438
|
+
N2kIpGateway.prototype.end = function () {
|
|
439
|
+
this.stopping = true;
|
|
440
|
+
if (this.reconnectTimer) {
|
|
441
|
+
clearTimeout(this.reconnectTimer);
|
|
442
|
+
this.reconnectTimer = undefined;
|
|
443
|
+
}
|
|
444
|
+
if (this.candevice) {
|
|
445
|
+
try {
|
|
446
|
+
this.candevice.stop();
|
|
447
|
+
}
|
|
448
|
+
catch (_e) {
|
|
449
|
+
// best-effort
|
|
450
|
+
}
|
|
451
|
+
this.candevice = undefined;
|
|
452
|
+
}
|
|
453
|
+
if (this.socket) {
|
|
454
|
+
try {
|
|
455
|
+
this.socket.end();
|
|
456
|
+
this.socket.destroy();
|
|
457
|
+
}
|
|
458
|
+
catch (_e) {
|
|
459
|
+
// best-effort
|
|
460
|
+
}
|
|
461
|
+
this.socket = undefined;
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
//# sourceMappingURL=n2kIpGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n2kIpGateway.js","sourceRoot":"","sources":["../lib/n2kIpGateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n2kIpGateway.test.d.ts","sourceRoot":"","sources":["../lib/n2kIpGateway.test.ts"],"names":[],"mappings":""}
|