import { decodeText, encodeText } from "./byte_util"; import { Bytes } from "./rtmt"; const headerLenght = 4 export type Message = { channel: string, data: Bytes, } // // channel is string, message is byte array // export function encode(message: Message) { const { channel, data } = message const channelLenght = channel.length const messageLenght = data.length const totalLenght = headerLenght + channelLenght + messageLenght const buffer = new ArrayBuffer(totalLenght); const view = new DataView(buffer); view.setUint32(0, channelLenght); const channelBytes = encodeText(channel) let count = headerLenght channelBytes.forEach((byte: any) => { view.setUint8(count, byte) count++ }) data.forEach((byte: any) => { view.setUint8(count, byte) count++ }) return buffer } // // return { channel : string, message : byte array} // export function decode(bytes: Bytes): Message { const channelLenght = bytes.readInt32BE(0) const channel = decodeText( bytes.slice(headerLenght, headerLenght + channelLenght)) const message = bytes.slice(headerLenght + channelLenght) return { "channel": channel, "data": message, } }