Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 4x 4x 4x 23x 23x 23x 23x 23x 23x 23x 23x 6x 6x 1x 5x 5x 7x 7x 5x 13x 13x 13x 9x 9x 9x | import * as siProtocol from '../siProtocol'; import {SiSendTaskState} from './ISiSendTask'; export class SiSendTask { public state: SiSendTaskState = SiSendTaskState.Queued; public responses: number[][] = []; private timeoutTimer: unknown; constructor( public message: siProtocol.SiMessage, public numResponses: number, public timeoutInMiliseconds: number, public onResolve: (task: SiSendTask) => void, public onReject: (task: SiSendTask) => void, ) { this.timeoutTimer = setTimeout(() => { const shouldAbortInState: {[state in SiSendTaskState]: boolean} = { [SiSendTaskState.Queued]: true, [SiSendTaskState.Sending]: true, [SiSendTaskState.Sent]: true, [SiSendTaskState.Succeeded]: false, [SiSendTaskState.Failed]: false, }; if (!shouldAbortInState[this.state]) { return; } console.debug(`Timeout: ${siProtocol.prettyMessage(this.message)} (expected ${this.numResponses} responses)`, this.responses); this.fail(); }, timeoutInMiliseconds); } addResponse(response: number[]): void { this.responses.push(response); if (this.responses.length === this.numResponses) { this.succeed(); } } succeed(): void { this.state = SiSendTaskState.Succeeded; clearTimeout(this.timeoutTimer as Parameters<typeof clearTimeout>[0]); this.onResolve(this); } fail(): void { this.state = SiSendTaskState.Failed; clearTimeout(this.timeoutTimer as Parameters<typeof clearTimeout>[0]); this.onReject(this); } } |