Use JSON over strings as payload format

This commit is contained in:
Thomas Nordquist
2019-04-03 00:39:02 +02:00
parent 27f5e8a7eb
commit d3598d8417
19 changed files with 145 additions and 37 deletions

View File

@@ -0,0 +1,27 @@
import { Base64 } from 'js-base64'
export class Base64Message {
private base64Message: string
public length: number
private constructor(base64Str: string) {
this.base64Message = base64Str
this.length = base64Str.length
}
public static toUnicodeString(message: Base64Message) {
return Base64.decode(message.base64Message)
}
public static fromBuffer(buffer: Buffer) {
return new Base64Message(buffer.toString('base64'))
}
public static fromString(str: string) {
return new Base64Message(Base64.encode(str))
}
public static toDataUri(message: Base64Message, mimeType: string) {
return `data:${mimeType};base64,${message.base64Message}`
}
}

View File

@@ -1,5 +1,7 @@
import { Base64Message } from './Base64Message'
export interface Message {
value?: any | undefined
value?: Base64Message
length: number
received: Date
}

View File

@@ -32,7 +32,7 @@ export class Tree<ViewModel> extends TreeNode<ViewModel> {
public applyUnmergedChanges() {
this.unmergedMessages.forEach((msg) => {
const edges = msg.topic.split('/')
const node = TreeNodeFactory.fromEdgesAndValue<ViewModel, any>(edges, msg.payload)
const node = TreeNodeFactory.fromEdgesAndValue<ViewModel>(edges, msg.payload)
node.mqttMessage = msg
if (!this.nodeFilter || this.nodeFilter(node)) {

View File

@@ -1,3 +1,4 @@
import { Base64Message } from './Base64Message'
import { Edge, Tree, TreeNode } from './'
interface HasLength {
@@ -18,10 +19,10 @@ export abstract class TreeNodeFactory {
node.sourceEdge!.target = node
}
public static fromEdgesAndValue<ViewModel, T extends HasLength>(edgeNames: string[], value?: T): TreeNode<ViewModel> {
public static fromEdgesAndValue<ViewModel>(edgeNames: string[], value?: Base64Message | null): TreeNode<ViewModel> {
const node = new TreeNode<ViewModel>()
node.setMessage({
value,
value: value || undefined,
length: value ? value.length : 0,
received: new Date(),
})