Some checks failed
Dependency builds / Build web (pull_request) Has been skipped
Dependency builds / Build desktop (pull_request) Has been skipped
Dependency builds / Test native MTP (pull_request) Has been skipped
Dependency builds / Build mobile (pull_request) Has been skipped
/ build-web (push) Failing after 3m32s
/ build-desktop (linux) (push) Failing after 2m47s
/ build-mobile (push) Failing after 5m29s
/ release (push) Has been skipped
24 lines
513 B
TypeScript
24 lines
513 B
TypeScript
const MAX_MTP_REQUEST_ID = 0xffff_ffff;
|
|
|
|
export class RequestIdAllocator {
|
|
#next: number;
|
|
|
|
constructor(next = 1) {
|
|
if (
|
|
!Number.isSafeInteger(next) ||
|
|
next <= 0 ||
|
|
next > MAX_MTP_REQUEST_ID + 1
|
|
) {
|
|
throw new RangeError("invalid MTP request ID allocator state");
|
|
}
|
|
this.#next = next;
|
|
}
|
|
|
|
allocate(): number {
|
|
if (this.#next > MAX_MTP_REQUEST_ID) {
|
|
throw new Error("MTP request ID space exhausted for this connection");
|
|
}
|
|
|
|
return this.#next++;
|
|
}
|
|
}
|