36 lines
830 B
TypeScript
36 lines
830 B
TypeScript
/**
|
|
* Monotonic sequence number generator — shared by stream + buffer.
|
|
*
|
|
* Each chunk of output gets a unique, monotonically increasing seq number.
|
|
* This lets clients resume a stream from a known position (IC-1 `lastSeq`).
|
|
*
|
|
* Owner: T-1.2
|
|
*/
|
|
|
|
export type SeqNum = number; // safe JS integer, starts at 1
|
|
|
|
/**
|
|
* Per-session sequence counter.
|
|
* Create one instance per session; share between the buffer writer and the
|
|
* WebSocket broadcaster.
|
|
*/
|
|
export class SequenceCounter {
|
|
private current: SeqNum = 0;
|
|
|
|
/** Increment and return the next seq number. */
|
|
next(): SeqNum {
|
|
this.current += 1;
|
|
return this.current;
|
|
}
|
|
|
|
/** Current value without incrementing. */
|
|
peek(): SeqNum {
|
|
return this.current;
|
|
}
|
|
|
|
/** Reset (e.g. after session restart). */
|
|
reset(): void {
|
|
this.current = 0;
|
|
}
|
|
}
|