@remix_labs/machine-starter 2.3095.0-dev → 2.3099.0-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.js +51 -0
- package/groovebox_build.js +1 -1
- package/package.json +2 -2
package/common.js
CHANGED
|
@@ -5,18 +5,31 @@ import { MixcoreTauri, filterFFINames } from "./mixcore.lib.mjs";
|
|
|
5
5
|
let workers = {};
|
|
6
6
|
let children = {};
|
|
7
7
|
let ffiLoops = {};
|
|
8
|
+
let blobs = {};
|
|
9
|
+
let blobsLoops = {};
|
|
8
10
|
|
|
9
11
|
function terminateAll() {
|
|
10
12
|
console.log("[groovebox-starter] terminate all VMs");
|
|
11
13
|
for (let [vmID, worker] of Object.entries(workers)) {
|
|
12
14
|
worker.terminate();
|
|
13
15
|
};
|
|
16
|
+
for (let [vmID, blobs] of Object.entries(blobs)) {
|
|
17
|
+
for (let blob_url of blobs) {
|
|
18
|
+
console.log("[groovebox-starter] revoke ", blob_url);
|
|
19
|
+
URL.revokeObjectURL(blob_url);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
14
22
|
for (let ffiLoop of Object.values(ffiLoops)) {
|
|
15
23
|
ffiLoop.terminate();
|
|
16
24
|
}
|
|
25
|
+
for (let blobsLoop of Object.values(blobsLoops)) {
|
|
26
|
+
blobsLoop.terminate();
|
|
27
|
+
}
|
|
17
28
|
workers = {};
|
|
18
29
|
children = {};
|
|
19
30
|
ffiLoops = {};
|
|
31
|
+
blobs = {};
|
|
32
|
+
blobsLoops = {};
|
|
20
33
|
}
|
|
21
34
|
|
|
22
35
|
function terminateVM(vmID) {
|
|
@@ -24,12 +37,20 @@ function terminateVM(vmID) {
|
|
|
24
37
|
let worker = workers[vmID];
|
|
25
38
|
if (worker) {
|
|
26
39
|
let vmChildren = children[vmID];
|
|
40
|
+
let blobList = blobs[vmID] || [];
|
|
27
41
|
let ffiLoop = ffiLoops[vmID];
|
|
42
|
+
let blobsLoop = blobsLoops[vmID];
|
|
28
43
|
delete workers[vmID];
|
|
29
44
|
delete children[vmID];
|
|
30
45
|
delete ffiLoops[vmID];
|
|
46
|
+
delete blobsLoops[vmID];
|
|
31
47
|
worker.terminate();
|
|
32
48
|
ffiLoop.terminate();
|
|
49
|
+
blobsLoop.terminate();
|
|
50
|
+
for (let blob_url of blobList) {
|
|
51
|
+
console.log("[groovebox-starter] revoke ", blob_url);
|
|
52
|
+
URL.revokeObjectURL(blob_url);
|
|
53
|
+
};
|
|
33
54
|
if (vmChildren) {
|
|
34
55
|
for (let subID of vmChildren) {
|
|
35
56
|
terminateVM(subID)
|
|
@@ -101,6 +122,7 @@ async function StartWASM2(hub, config) {
|
|
|
101
122
|
localFFIkind["$vm_stop"] = vm_kind;
|
|
102
123
|
localFFIfuns["$vm_stop"] = ffi_vm_stop;
|
|
103
124
|
ffiLoops[config.vmID] = setupLocalFFIs(hub, config, localFFIfuns);
|
|
125
|
+
blobsLoops[config.vmID] = setupBlobs(hub, config);
|
|
104
126
|
let config_msg =
|
|
105
127
|
{ "_rmx_type": "msg_vm_configure",
|
|
106
128
|
"baseURL": config.baseURL,
|
|
@@ -322,6 +344,35 @@ async function localFFIsMessageLoop(hub, config, localFFIs, terminate) {
|
|
|
322
344
|
}
|
|
323
345
|
}
|
|
324
346
|
|
|
347
|
+
function setupBlobs(hub, config) {
|
|
348
|
+
let vmID = config.vmID;
|
|
349
|
+
let terminate = Promise.withResolvers();
|
|
350
|
+
blobsMessageLoop(hub, config, terminate.promise); // don't wait
|
|
351
|
+
return {terminate: terminate.resolve};
|
|
352
|
+
}
|
|
353
|
+
async function blobsMessageLoop(hub, config, terminate) {
|
|
354
|
+
let vmID = config.vmID;
|
|
355
|
+
let channel = await hub.newChannel();
|
|
356
|
+
let comm = new FFIComm(vmID, hub, channel);
|
|
357
|
+
let sub = await channel.subscribe("/local/" + vmID + "/blobs");
|
|
358
|
+
while (true) {
|
|
359
|
+
let {msg, terminated} = await Promise.race([
|
|
360
|
+
sub.next().then((msg) => ({msg})),
|
|
361
|
+
terminate.then(() => ({terminated: true})),
|
|
362
|
+
]);
|
|
363
|
+
if (terminated) {
|
|
364
|
+
console.log("[groovebox-starter] terminate blobs loop", vmID);
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
let name = msg.payload.name;
|
|
368
|
+
let url = msg.payload.url;
|
|
369
|
+
let blobList = blobs[vmID];
|
|
370
|
+
if (!blobList) blobList = [];
|
|
371
|
+
blobList.push(url);
|
|
372
|
+
blobs[vmID] = blobList;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
325
376
|
class FFIComm {
|
|
326
377
|
constructor(vmID, hub, channel) {
|
|
327
378
|
this.vmID = vmID;
|
package/groovebox_build.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var GROOVEBOX_BUILD = "
|
|
1
|
+
var GROOVEBOX_BUILD = "3449";
|
|
2
2
|
export { GROOVEBOX_BUILD }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remix_labs/machine-starter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3099.0-dev",
|
|
4
4
|
"description": "start the groove",
|
|
5
5
|
"main": "node.js",
|
|
6
6
|
"browser": "index.js",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"author": "Remixlabs staff",
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@remix_labs/hub-client": "2.
|
|
14
|
+
"@remix_labs/hub-client": "2.3099.0-dev",
|
|
15
15
|
"nanoid": "^5.0.2",
|
|
16
16
|
"web-worker": "^1.2.0"
|
|
17
17
|
},
|