Skip to content

Commit 0f0f8d3

Browse files
committed
fix: parse incoming data as strings (Big Refactor)
1 parent faf40b7 commit 0f0f8d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+3248
-1501
lines changed

packages/connector/src/MosConnection.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { NCSServerConnection } from './connection/NCSServerConnection'
88
import { MosModel } from '@mos-connection/helper'
99
import { EventEmitter } from 'eventemitter3'
1010
import * as iconv from 'iconv-lite'
11-
import { MosMessageParser } from './connection/mosMessageParser'
11+
import { ParsedMosMessage, MosMessageParser } from './connection/mosMessageParser'
1212
import { IConnectionConfig, IMosConnection, IMOSDeviceConnectionOptions } from './api'
1313
import { PROFILE_VALIDNESS_CHECK_WAIT_TIME } from './lib'
1414

@@ -407,7 +407,7 @@ export class MosConnection extends EventEmitter<MosConnectionEvents> implements
407407
`${socketID}, ${client.socket.remoteAddress}, ${client.portDescription}`
408408
)
409409
// messageParser.debug = this._debug
410-
messageParser.on('message', (message: MosModel.AnyXML, messageString: string) => {
410+
messageParser.on('message', (message: ParsedMosMessage, messageString: string) => {
411411
// Handle incoming data
412412
handleMessage(message, messageString).catch((err) => this.emit('error', err))
413413
})
@@ -435,15 +435,15 @@ export class MosConnection extends EventEmitter<MosConnectionEvents> implements
435435
this.emit('error', err instanceof Error ? err : new Error(`${err}`))
436436
}
437437
})
438-
const handleMessage = async (parsed: MosModel.AnyXML, _messageString: string) => {
438+
const handleMessage = async (parsed: ParsedMosMessage, _messageString: string) => {
439439
const remoteAddressContent = client.socket.remoteAddress
440440
? client.socket.remoteAddress.split(':')
441441
: undefined
442442
const remoteAddress = remoteAddressContent ? remoteAddressContent[remoteAddressContent.length - 1] : ''
443443

444444
const ncsID = parsed.mos.ncsID
445445
const mosID = parsed.mos.mosID
446-
const mosMessageId: number = parsed.mos.messageID
446+
const mosMessageId = parsed.mos.messageID ? parseInt(parsed.mos.messageID, 10) : undefined
447447

448448
let mosDevice = this._mosDevices[ncsID + '_' + mosID] || this._mosDevices[mosID + '_' + ncsID]
449449

@@ -513,24 +513,36 @@ export class MosConnection extends EventEmitter<MosConnectionEvents> implements
513513
}
514514
if (mosDevice) {
515515
mosDevice
516-
.routeData(parsed, client.portDescription)
516+
.routeData(parsed.mos, client.portDescription)
517+
.catch((err) => {
518+
if (MosModel.ParseError.isParseError(err)) {
519+
// Try to add the main mos message key to the error:
520+
const breadcrumbs = Object.keys(parsed.mos).filter(
521+
(key) =>
522+
!['messageID', 'mosID', 'ncsID'].includes(key) &&
523+
typeof parsed.mos[key] === 'object'
524+
)
525+
throw MosModel.ParseError.handleCaughtError(breadcrumbs.join('/'), err)
526+
} else throw err
527+
})
517528
.then((message: MosModel.MosMessage) => {
518529
sendReply(message)
519530
})
520-
.catch((err: Error | MosModel.MosMessage) => {
531+
.catch((err: Error | MosModel.MosMessage | MosModel.ParseError) => {
521532
// Something went wrong
522533
if (err instanceof MosModel.MosMessage) {
523534
sendReply(err)
524535
} else {
525-
// Unknown / internal error
536+
// Internal/parsing error
537+
526538
// Log error:
527539
this.emit('warning', `Error when handling incoming data: ${err} ${err?.stack}`)
528540
// reply with NACK:
529541
// TODO: implement ACK
530542
// https://mosprotocol.com/wp-content/MOS-Protocol-Documents/MOS_Protocol_Version_2.8.5_Final.htm#mosAck
531543
const msg = new MosModel.MOSAck(
532544
{
533-
ID: this.mosTypes.mosString128.create(0),
545+
ID: this.mosTypes.mosString128.create('0'),
534546
Revision: 0,
535547
Description: this.mosTypes.mosString128.create(
536548
`MosDevice "${ncsID + '_' + mosID}" not found`
@@ -548,7 +560,7 @@ export class MosConnection extends EventEmitter<MosConnectionEvents> implements
548560
// We can't handle the message, reply with a NACK:
549561
const msg = new MosModel.MOSAck(
550562
{
551-
ID: this.mosTypes.mosString128.create(0),
563+
ID: this.mosTypes.mosString128.create('0'),
552564
Revision: 0,
553565
Description: this.mosTypes.mosString128.create('MosDevice not found'),
554566
Status: IMOSAckStatus.NACK,

0 commit comments

Comments
 (0)