Add Session.genRequestNumDiscriminator()
This commit is contained in:
15
src/usimp.ts
15
src/usimp.ts
@ -21,7 +21,7 @@ interface DomainServerJson {
|
|||||||
|
|
||||||
interface OutputEnvelopeJson {
|
interface OutputEnvelopeJson {
|
||||||
status: string,
|
status: string,
|
||||||
requestNr: number,
|
request_nr: number,
|
||||||
data: any,
|
data: any,
|
||||||
action: string | null | undefined,
|
action: string | null | undefined,
|
||||||
error: {
|
error: {
|
||||||
@ -156,6 +156,7 @@ export class Session {
|
|||||||
httpBaseUrl: string | null;
|
httpBaseUrl: string | null;
|
||||||
websocket: WebSocket | null;
|
websocket: WebSocket | null;
|
||||||
numRequests: number;
|
numRequests: number;
|
||||||
|
requestNumDiscriminator: number;
|
||||||
subscriptions: {
|
subscriptions: {
|
||||||
callback: (a: EventJson) => void,
|
callback: (a: EventJson) => void,
|
||||||
requestNr: number | undefined,
|
requestNr: number | undefined,
|
||||||
@ -168,6 +169,7 @@ export class Session {
|
|||||||
constructor(domain: Domain) {
|
constructor(domain: Domain) {
|
||||||
this.domain = domain;
|
this.domain = domain;
|
||||||
this.numRequests = 0;
|
this.numRequests = 0;
|
||||||
|
this.requestNumDiscriminator = Session.genRequestNumDiscriminator();
|
||||||
this.server = null;
|
this.server = null;
|
||||||
this.token = null;
|
this.token = null;
|
||||||
this.httpBaseUrl = null;
|
this.httpBaseUrl = null;
|
||||||
@ -176,6 +178,14 @@ export class Session {
|
|||||||
this.subscriptionEndpoints = [];
|
this.subscriptionEndpoints = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static genRequestNumDiscriminator(): number {
|
||||||
|
// JS uses 64-bit double precision floating point numbers.
|
||||||
|
// These can accurately represent integers up to 53 bit.
|
||||||
|
// In JS bitwise operators only operate on 32-bit integers.
|
||||||
|
// Here a 48-bit integer number is generated.
|
||||||
|
return Math.floor(Math.random() * 0x1000000) * 0x1000000;
|
||||||
|
}
|
||||||
|
|
||||||
async close(keepEndpoints: boolean = false) {
|
async close(keepEndpoints: boolean = false) {
|
||||||
await this.unsubscribeAll(keepEndpoints);
|
await this.unsubscribeAll(keepEndpoints);
|
||||||
if (this.websocket && (this.websocket.readyState !== WebSocket.CLOSING && this.websocket.readyState !== WebSocket.CLOSED)) {
|
if (this.websocket && (this.websocket.readyState !== WebSocket.CLOSING && this.websocket.readyState !== WebSocket.CLOSED)) {
|
||||||
@ -303,7 +313,7 @@ export class Session {
|
|||||||
while (true) {
|
while (true) {
|
||||||
try {
|
try {
|
||||||
if (!forceHttp && this.websocket !== null) {
|
if (!forceHttp && this.websocket !== null) {
|
||||||
const req_nr = this.numRequests;
|
const req_nr = this.numRequests + this.requestNumDiscriminator;
|
||||||
const startTime = performance.now();
|
const startTime = performance.now();
|
||||||
|
|
||||||
await this.waitForWebSocket(timeout);
|
await this.waitForWebSocket(timeout);
|
||||||
@ -421,7 +431,6 @@ export class Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _subscribe(cb: (a: EventJson) => void) {
|
private async _subscribe(cb: (a: EventJson) => void) {
|
||||||
this.numRequests++;
|
|
||||||
if (this.websocket !== null) {
|
if (this.websocket !== null) {
|
||||||
const subscription = await this.send('subscribe', {}, 60_000, false, undefined, (res) => {
|
const subscription = await this.send('subscribe', {}, 60_000, false, undefined, (res) => {
|
||||||
if (res.action === 'push') {
|
if (res.action === 'push') {
|
||||||
|
Reference in New Issue
Block a user