openreplay/frontend/app/player/MessageDistributor/messages/MStreamReader.ts
2022-08-23 16:27:18 +02:00

28 lines
757 B
TypeScript

import type { Message } from './message'
import type { RawMessage } from './raw'
import RawMessageReader from './RawMessageReader'
interface RawMessageReaderI {
readMessage(): RawMessage | null
}
export default class MStreamReader {
constructor(private readonly r: RawMessageReaderI = new RawMessageReader(), private startTs: number = 0){}
private t: number = 0
private idx: number = 0
readNext(): Message | null {
let msg = this.r.readMessage()
if (msg === null) { return null }
if (msg.tp === "timestamp") {
this.startTs = this.startTs || msg.timestamp
this.t = msg.timestamp - this.startTs
return this.readNext()
}
return Object.assign(msg, {
time: this.t,
_index: this.idx++,
})
}
}