-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
58 lines (50 loc) · 1.09 KB
/
index.js
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
52
53
54
55
56
57
58
let currentTimeoutId = undefined;
let isEnabled = false;
let controller = undefined;
let messagePorts = new Set();
exports.loadPackage = async function (
gridController,
persistedData
) {
controller = gridController;
isEnabled = true;
runLoop();
};
exports.unloadPackage = async function () {
controller = undefined;
messagePorts.forEach((port) => port.close());
messagePorts.clear();
cancelLoop();
};
exports.addMessagePort = async function (port) {
port.on("message", (e) => {
onMessage(port, e.data);
});
messagePorts.add(port);
port.on("close", () => {
messagePorts.delete(port);
});
port.start();
};
async function onMessage(port, data) {
if (data.type === "request-echo") {
port.postMessage({
type: "echo",
message: "Echo message",
});
}
}
async function runLoop() {
if (!isEnabled) return;
messagePorts.forEach((port) =>
port.postMessage({
type: "echo",
message: "Loop message",
})
);
currentTimeoutId = setTimeout(runLoop, 2000);
}
function cancelLoop() {
isEnabled = false;
clearTimeout(currentTimeoutId);
}