Skip to content

Commit

Permalink
fix: improve error handling when parsing (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
sbender9 authored Jun 1, 2019
1 parent e8ca0f7 commit e498b99
Showing 1 changed file with 73 additions and 48 deletions.
121 changes: 73 additions & 48 deletions lib/fromPgn.js
Original file line number Diff line number Diff line change
Expand Up @@ -260,22 +260,28 @@ class Parser extends EventEmitter {
}

parsePgnData(pgn, length, data, cb) {
var buffer = data
if ( !_.isBuffer(data) ) {
var array = new Int16Array(length)
data.forEach((num, index) => {
array[index] = parseInt(num, 16)
})
buffer = new Buffer(array)
}

var bv = new BitView(buffer);
var bs = new BitStream(bv)
const res = this._parse(pgn, bs, length, cb);
if ( res ) {
debug('parsed pgn %j', pgn)
try
{
var buffer = data
if ( !_.isBuffer(data) ) {
var array = new Int16Array(length)
data.forEach((num, index) => {
array[index] = parseInt(num, 16)
})
buffer = new Buffer(array)
}

var bv = new BitView(buffer);
var bs = new BitStream(bv)
const res = this._parse(pgn, bs, length, cb);
if ( res ) {
debug('parsed pgn %j', pgn)
}
return res
} catch ( error ) {
cb && cb(error)
this.emit('error', pgn, error)
}
return res
}

isN2KOver0183(sentence) {
Expand All @@ -288,52 +294,71 @@ class Parser extends EventEmitter {

// Venus MQTT-N2K
parseVenusMQTT(pgn_data, cb) {
const pgn = {
pgn: pgn_data.pgn,
timestamp: new Date().toISOString(),
src: pgn_data.src,
dst: pgn_data.dst
}
const bs = new BitStream(Buffer.from(pgn_data.data, 'base64'))
const res = this._parse(pgn, bs, 8, cb)
if ( res ) {
debug('parsed pgn %j', pgn)
}
return res
try
{
const pgn = {
pgn: pgn_data.pgn,
timestamp: new Date().toISOString(),
src: pgn_data.src,
dst: pgn_data.dst
}
const bs = new BitStream(Buffer.from(pgn_data.data, 'base64'))
const res = this._parse(pgn, bs, 8, cb)
if ( res ) {
debug('parsed pgn %j', pgn)
}
return res
} catch ( error ) {
cb && cb(error)
this.emit('error', pgn, error)
}
}

//Yacht Devices NMEA2000 Wifi gateway
parseYDGW02(pgn_data, cb) {
const { data, direction, error, ...pgn } = parseYDRAW(pgn_data)
if (!error && direction === 'R') {
const bs = new BitStream(data)
delete pgn.format
const res = this._parse(pgn, bs, data.length, cb)
if ( res ) {
debug('parsed ydgw02 pgn %j', pgn)
return res
try {
const { data, direction, error, ...pgn } = parseYDRAW(pgn_data)
if (!error && direction === 'R') {
const bs = new BitStream(data)
delete pgn.format
const res = this._parse(pgn, bs, data.length, cb)
if ( res ) {
debug('parsed ydgw02 pgn %j', pgn)
return res
}
} else if ( error ) {
cb && cb(error)
this.emit('error', pgn, error)
}
} catch ( error ) {
cb && cb(error)
this.emit('error', pgn, error)
}
return undefined
}

parseString (pgn_data, cb) {
const { data, error, len, ...pgn } = parseN2kString(pgn_data)
if (error) {
try {
const { data, error, len, ...pgn } = parseN2kString(pgn_data)
if (error) {
cb && cb(error)
this.emit('error', pgn, error)
return
}

const bs = new BitStream(data)
delete pgn.format
delete pgn.type
delete pgn.prefix
const res = this._parse(pgn, bs, len || data.length, cb)
if (res) {
debug('parsed pgn %j', pgn)
}
return res
} catch ( error ) {
cb && cb(error)
this.emit('error', pgn, error)
return
}

const bs = new BitStream(data)
delete pgn.format
delete pgn.type
delete pgn.prefix
const res = this._parse(pgn, bs, len || data.length, cb)
if (res) {
debug('parsed pgn %j', pgn)
}
return res
}

parseBuffer (pgn_data, cb) {
Expand Down

0 comments on commit e498b99

Please sign in to comment.