diff --git a/backend/src/Model/ChangeBuffer.ts b/backend/src/Model/ChangeBuffer.ts index a0d1051..018e5ba 100644 --- a/backend/src/Model/ChangeBuffer.ts +++ b/backend/src/Model/ChangeBuffer.ts @@ -1,7 +1,12 @@ import { MqttMessage } from '../../../events' +interface BufferedMessage { + message: MqttMessage + received: Date +} + export class ChangeBuffer { - private buffer: Array = [] + private buffer: Array = [] private size = 0 private maxSize = 100_000_000 // ~100MB public length = 0 @@ -9,7 +14,7 @@ export class ChangeBuffer { public push(val: MqttMessage) { if (!this.isFull()) { - this.buffer.push(val) + this.buffer.push({ message: val, received: new Date() }) this.size += this.estimatedMessageOverhead + (val.payload ? val.payload.length : 0) this.length += 1 } @@ -27,7 +32,7 @@ export class ChangeBuffer { return this.size / this.maxSize } - public popAll(): Array { + public popAll(): Array { const tmpBuffer = this.buffer this.buffer = [] this.size = 0 diff --git a/backend/src/Model/Tree.ts b/backend/src/Model/Tree.ts index c49762e..09232fc 100644 --- a/backend/src/Model/Tree.ts +++ b/backend/src/Model/Tree.ts @@ -48,10 +48,14 @@ export class Tree extends TreeNode { } public applyUnmergedChanges() { - this.unmergedMessages.popAll().forEach(msg => { - const edges = msg.topic.split('/') - const node = TreeNodeFactory.fromEdgesAndValue(edges, msg.payload) - node.mqttMessage = msg + this.unmergedMessages.popAll().forEach(bufferedItem => { + const edges = bufferedItem.message.topic.split('/') + const node = TreeNodeFactory.fromEdgesAndValue( + edges, + bufferedItem.message.payload, + bufferedItem.received + ) + node.mqttMessage = bufferedItem.message if (!this.nodeFilter || this.nodeFilter(node)) { this.updateWithNode(node.firstNode()) diff --git a/backend/src/Model/TreeNodeFactory.ts b/backend/src/Model/TreeNodeFactory.ts index 53b6987..f8e6f85 100644 --- a/backend/src/Model/TreeNodeFactory.ts +++ b/backend/src/Model/TreeNodeFactory.ts @@ -22,13 +22,14 @@ export abstract class TreeNodeFactory { public static fromEdgesAndValue( edgeNames: Array, - value?: Base64Message | null + value?: Base64Message | null, + receiveDate: Date = new Date() ): TreeNode { const node = new TreeNode() node.setMessage({ value: value || undefined, length: value ? value.length : 0, - received: new Date(), + received: receiveDate, messageNumber: this.messageCounter, }) this.messageCounter += 1