diff --git a/backend/src/Model/sparkplugb.ts b/backend/src/Model/sparkplugb.ts index f9fc7ce..b4b460d 100644 --- a/backend/src/Model/sparkplugb.ts +++ b/backend/src/Model/sparkplugb.ts @@ -9,7 +9,7 @@ const root = protobuf.parse(protocol).root export let SparkplugPayload = root.lookupType('com.cirruslink.sparkplug.protobuf.Payload') export const SparkplugDecoder = { - decode(input: Buffer): Base64Message | undefined { + decode(input: Buffer): Base64Message { try { const message = Base64Message.fromString( JSON.stringify(SparkplugPayload.toObject(SparkplugPayload.decode(new Uint8Array(input)))) @@ -17,8 +17,9 @@ export const SparkplugDecoder = { message.decoder = Decoder.SPARKPLUG return message } catch { - // ignore + const message = Base64Message.fromString("Failed to decode sparkplugb payload") + message.decoder = Decoder.NONE + return message } - return undefined }, } diff --git a/backend/src/index.ts b/backend/src/index.ts index 4cd6a92..9f0df55 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -47,9 +47,16 @@ export class ConnectionManager { buffer = buffer.slice(0, 20000) } + let decoded_payload = null + if (topic.startsWith("spBv1.0/")) { + decoded_payload = SparkplugDecoder.decode(buffer) + } else { + decoded_payload = Base64Message.fromBuffer(buffer) + } + backendEvents.emit(messageEvent, { topic, - payload: SparkplugDecoder.decode(buffer) ?? Base64Message.fromBuffer(buffer), + payload: decoded_payload, qos: packet.qos, retain: packet.retain, messageId: packet.messageId,