1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | Object.defineProperty(exports, "__esModule", { value: true });
|
7 | exports.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = void 0;
|
8 | const cancellation_1 = require("./cancellation");
|
9 | var CancellationState;
|
10 | (function (CancellationState) {
|
11 | CancellationState.Continue = 0;
|
12 | CancellationState.Cancelled = 1;
|
13 | })(CancellationState || (CancellationState = {}));
|
14 | class SharedArraySenderStrategy {
|
15 | constructor() {
|
16 | this.buffers = new Map();
|
17 | }
|
18 | enableCancellation(request) {
|
19 | if (request.id === null) {
|
20 | return;
|
21 | }
|
22 | const buffer = new SharedArrayBuffer(4);
|
23 | const data = new Int32Array(buffer, 0, 1);
|
24 | data[0] = CancellationState.Continue;
|
25 | this.buffers.set(request.id, buffer);
|
26 | request.$cancellationData = buffer;
|
27 | }
|
28 | async sendCancellation(_conn, id) {
|
29 | const buffer = this.buffers.get(id);
|
30 | if (buffer === undefined) {
|
31 | return;
|
32 | }
|
33 | const data = new Int32Array(buffer, 0, 1);
|
34 | Atomics.store(data, 0, CancellationState.Cancelled);
|
35 | }
|
36 | cleanup(id) {
|
37 | this.buffers.delete(id);
|
38 | }
|
39 | dispose() {
|
40 | this.buffers.clear();
|
41 | }
|
42 | }
|
43 | exports.SharedArraySenderStrategy = SharedArraySenderStrategy;
|
44 | class SharedArrayBufferCancellationToken {
|
45 | constructor(buffer) {
|
46 | this.data = new Int32Array(buffer, 0, 1);
|
47 | }
|
48 | get isCancellationRequested() {
|
49 | return Atomics.load(this.data, 0) === CancellationState.Cancelled;
|
50 | }
|
51 | get onCancellationRequested() {
|
52 | throw new Error(`Cancellation over SharedArrayBuffer doesn't support cancellation events`);
|
53 | }
|
54 | }
|
55 | class SharedArrayBufferCancellationTokenSource {
|
56 | constructor(buffer) {
|
57 | this.token = new SharedArrayBufferCancellationToken(buffer);
|
58 | }
|
59 | cancel() {
|
60 | }
|
61 | dispose() {
|
62 | }
|
63 | }
|
64 | class SharedArrayReceiverStrategy {
|
65 | constructor() {
|
66 | this.kind = 'request';
|
67 | }
|
68 | createCancellationTokenSource(request) {
|
69 | const buffer = request.$cancellationData;
|
70 | if (buffer === undefined) {
|
71 | return new cancellation_1.CancellationTokenSource();
|
72 | }
|
73 | return new SharedArrayBufferCancellationTokenSource(buffer);
|
74 | }
|
75 | }
|
76 | exports.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;
|