UNPKG

2.64 kBJavaScriptView Raw
1"use strict";
2/* --------------------------------------------------------------------------------------------
3 * Copyright (c) Microsoft Corporation. All rights reserved.
4 * Licensed under the MIT License. See License.txt in the project root for license information.
5 * ------------------------------------------------------------------------------------------ */
6Object.defineProperty(exports, "__esModule", { value: true });
7exports.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = void 0;
8const cancellation_1 = require("./cancellation");
9var CancellationState;
10(function (CancellationState) {
11 CancellationState.Continue = 0;
12 CancellationState.Cancelled = 1;
13})(CancellationState || (CancellationState = {}));
14class 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}
43exports.SharedArraySenderStrategy = SharedArraySenderStrategy;
44class 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}
55class SharedArrayBufferCancellationTokenSource {
56 constructor(buffer) {
57 this.token = new SharedArrayBufferCancellationToken(buffer);
58 }
59 cancel() {
60 }
61 dispose() {
62 }
63}
64class 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}
76exports.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;