aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/editor/PendingRequest.ts
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-10-25 00:29:37 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-10-31 19:26:11 +0100
commitdcbfeece5e559b60a615f0aa9b933b202d34bf8b (patch)
treeafdacff7492284f5f8cc147c4b84e4ba5db259b3 /language-web/src/main/js/editor/PendingRequest.ts
parenttest(web): more websocket integration tests (diff)
downloadrefinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.tar.gz
refinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.tar.zst
refinery-dcbfeece5e559b60a615f0aa9b933b202d34bf8b.zip
feat(web): add xtext websocket client
Diffstat (limited to 'language-web/src/main/js/editor/PendingRequest.ts')
-rw-r--r--language-web/src/main/js/editor/PendingRequest.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/language-web/src/main/js/editor/PendingRequest.ts b/language-web/src/main/js/editor/PendingRequest.ts
new file mode 100644
index 00000000..784f06ec
--- /dev/null
+++ b/language-web/src/main/js/editor/PendingRequest.ts
@@ -0,0 +1,47 @@
1import { getLogger } from '../logging';
2
3const REQUEST_TIMEOUT_MS = 1000;
4
5const log = getLogger('PendingRequest');
6
7export class PendingRequest {
8 private readonly resolveCallback: (value: unknown) => void;
9
10 private readonly rejectCallback: (reason?: unknown) => void;
11
12 private resolved = false;
13
14 private timeoutId: NodeJS.Timeout;
15
16 constructor(resolve: (value: unknown) => void, reject: (reason?: unknown) => void) {
17 this.resolveCallback = resolve;
18 this.rejectCallback = reject;
19 this.timeoutId = setTimeout(() => {
20 if (!this.resolved) {
21 this.reject(new Error('Request timed out'));
22 }
23 }, REQUEST_TIMEOUT_MS);
24 }
25
26 resolve(value: unknown): void {
27 if (this.resolved) {
28 log.warn('Trying to resolve already resolved promise');
29 return;
30 }
31 this.markResolved();
32 this.resolveCallback(value);
33 }
34
35 reject(reason?: unknown): void {
36 if (this.resolved) {
37 log.warn('Trying to reject already resolved promise');
38 }
39 this.markResolved();
40 this.rejectCallback(reason);
41 }
42
43 private markResolved() {
44 this.resolved = true;
45 clearTimeout(this.timeoutId);
46 }
47}