core: watch for script worker exits

This commit is contained in:
Koushik Dutta
2024-01-01 14:12:27 -08:00
parent d7aaf57e8f
commit fd56990d64
3 changed files with 12 additions and 4 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/core",
"version": "0.2.1",
"version": "0.2.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/core",
"version": "0.2.1",
"version": "0.2.2",
"license": "Apache-2.0",
"dependencies": {
"@scrypted/common": "file:../../common",

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/core",
"version": "0.2.1",
"version": "0.2.2",
"description": "Scrypted Core plugin. Provides the UI, websocket, and engine.io APIs.",
"author": "Scrypted",
"license": "Apache-2.0",

View File

@@ -78,13 +78,15 @@ export class ScriptCore extends ScryptedDeviceBase implements DeviceProvider, De
const e = this.scripts.get(nativeId);
if (e)
return e;
let script = new Script(nativeId);
let worker: Worker;
if (script.providedInterfaces.length > 2) {
const fork = sdk.fork<{
newScript: typeof newScript,
}>();
worker = fork.worker
worker = fork.worker;
try {
script = await (await fork.result).newScript(nativeId);
await script.run();
@@ -94,6 +96,12 @@ export class ScriptCore extends ScryptedDeviceBase implements DeviceProvider, De
throw e;
}
}
worker?.on('exit', () => {
if (this.scripts.get(nativeId)?.worker === worker)
this.scripts.delete(nativeId);
});
this.scripts.set(nativeId, {
script,
worker,