fix: use sparkplugb decoder only for spBv1.0 topic

This commit is contained in:
Björn Dalfors
2024-05-15 15:24:30 +02:00
parent 65b86ac5f6
commit 8a2c39ba8e
2 changed files with 12 additions and 4 deletions

View File

@@ -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
},
}

View File

@@ -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,