From 16d38906fe11f02149dcc3ea88fe60d0d5f0dc16 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Tue, 9 Apr 2024 22:19:09 -0700 Subject: [PATCH] postbeta --- server/package.json | 2 +- server/src/plugin/plugin-host.ts | 4 ---- server/src/plugin/runtime/child-process-worker.ts | 5 ++--- server/src/plugin/runtime/runtime-worker.ts | 7 +++++-- server/src/runtime.ts | 7 +++++-- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/server/package.json b/server/package.json index e0b1347f2..46b904e5f 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/server", - "version": "0.98.0", + "version": "0.98.1", "description": "", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", diff --git a/server/src/plugin/plugin-host.ts b/server/src/plugin/plugin-host.ts index 5cada50e4..adbdcfac2 100644 --- a/server/src/plugin/plugin-host.ts +++ b/server/src/plugin/plugin-host.ts @@ -319,10 +319,6 @@ export class PluginHost { logger.log('e', `${this.pluginName} close`); disconnect(); }); - this.worker.on('disconnect', () => { - logger.log('e', `${this.pluginName} disconnected`); - disconnect(); - }); this.worker.on('exit', async (code, signal) => { logger.log('e', `${this.pluginName} exited ${code} ${signal}`); disconnect(); diff --git a/server/src/plugin/runtime/child-process-worker.ts b/server/src/plugin/runtime/child-process-worker.ts index 3b2f57015..3d526cf65 100644 --- a/server/src/plugin/runtime/child-process-worker.ts +++ b/server/src/plugin/runtime/child-process-worker.ts @@ -11,10 +11,9 @@ export abstract class ChildProcessWorker extends EventEmitter implements Runtime } setupWorker() { - this.worker.on('close', () => this.emit('close')); - this.worker.on('disconnect', () => this.emit('disconnect')); + this.worker.on('close', (code: number | null, signal: NodeJS.Signals | null) => this.emit('close', code, signal)); + this.worker.on('disconnect', () => this.emit('error', new Error('disconnect'))); this.worker.on('exit', (code, signal) => this.emit('exit', code, signal)); - this.worker.on('close', () => this.emit('close')); this.worker.on('error', e => this.emit('error', e)); } diff --git a/server/src/plugin/runtime/runtime-worker.ts b/server/src/plugin/runtime/runtime-worker.ts index 92e016dad..70acf434a 100644 --- a/server/src/plugin/runtime/runtime-worker.ts +++ b/server/src/plugin/runtime/runtime-worker.ts @@ -20,11 +20,14 @@ export interface RuntimeWorker { kill(): void; on(event: 'rpc', listener: (message: any, sendHandle: net.Socket) => void): this; + on(event: 'error', listener: (err: Error) => void): this; - on(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; - on(event: 'disconnect', listener: () => void): this; on(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + + once(event: 'error', listener: (err: Error) => void): this; once(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; send(message: RpcMessage, reject?: (e: Error) => void, serializationContext?: any): void; diff --git a/server/src/runtime.ts b/server/src/runtime.ts index f0dea44f0..659656f43 100644 --- a/server/src/runtime.ts +++ b/server/src/runtime.ts @@ -627,7 +627,7 @@ export class ScryptedRuntime extends PluginHttp { } setupPluginHostAutoRestart(pluginHost: PluginHost) { - pluginHost.worker.once('exit', () => { + const restart = () => { if (pluginHost.killed) return; pluginHost.kill(); @@ -653,7 +653,10 @@ export class ScryptedRuntime extends PluginHttp { console.error('error restarting plugin', plugin._id, e); } }, timeout); - }); + }; + pluginHost.worker.once('error', restart); + pluginHost.worker.once('exit', restart); + pluginHost.worker.once('close', restart); } loadPlugin(plugin: Plugin, pluginDebug?: PluginDebug) {