From e169d154e7fcba7d07e7b682deb0e8526e52f998 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sat, 29 Apr 2023 11:09:56 -0700 Subject: [PATCH] server: add hook for getting runtime --- server/package-lock.json | 4 ++-- server/src/plugin/plugin-remote-worker.ts | 8 ++++++-- server/src/scrypted-plugin-main.ts | 8 ++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 8168e1e2b..45cac1a4a 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/server", - "version": "0.7.97", + "version": "0.7.99", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@scrypted/server", - "version": "0.7.97", + "version": "0.7.99", "license": "ISC", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.10", diff --git a/server/src/plugin/plugin-remote-worker.ts b/server/src/plugin/plugin-remote-worker.ts index d0ef3b2f2..ce91e9e8e 100644 --- a/server/src/plugin/plugin-remote-worker.ts +++ b/server/src/plugin/plugin-remote-worker.ts @@ -63,7 +63,7 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe let postInstallSourceMapSupport: (scrypted: ScryptedStatic) => void; - attachPluginRemote(peer, { + const scrypted = attachPluginRemote(peer, { createMediaManager: async (sm, dm) => { systemManager = sm; deviceManager = dm @@ -394,7 +394,11 @@ export function startPluginRemote(mainFilename: string, pluginId: string, peerSe }).then(scrypted => { systemManager = scrypted.systemManager; deviceManager = scrypted.deviceManager as DeviceManagerImpl; + return scrypted; }); - return peer; + return { + peer, + scryptedPromise: scrypted, + }; } diff --git a/server/src/scrypted-plugin-main.ts b/server/src/scrypted-plugin-main.ts index 11a42a364..d135ab71b 100644 --- a/server/src/scrypted-plugin-main.ts +++ b/server/src/scrypted-plugin-main.ts @@ -7,7 +7,7 @@ import { SidebandSocketSerializer } from "./plugin/socket-serializer"; function start(mainFilename: string) { if (process.argv[2] === 'child-thread') { - const peer = startPluginRemote(mainFilename, process.argv[3], (message, reject) => { + const ret = startPluginRemote(mainFilename, process.argv[3], (message, reject) => { try { worker_threads.parentPort.postMessage(v8.serialize(message)); } @@ -15,17 +15,20 @@ function start(mainFilename: string) { reject?.(e); } }); + const { peer } = ret; peer.transportSafeArgumentTypes.add(Buffer.name); peer.transportSafeArgumentTypes.add(Uint8Array.name); worker_threads.parentPort.on('message', message => peer.handleMessage(v8.deserialize(message))); + return ret; } else { - const peer = startPluginRemote(mainFilename, process.argv[3], (message, reject, serializationContext) => process.send(message, serializationContext?.sendHandle, { + const ret = startPluginRemote(mainFilename, process.argv[3], (message, reject, serializationContext) => process.send(message, serializationContext?.sendHandle, { swallowErrors: !reject, }, e => { if (e) reject?.(e); })); + const { peer } = ret; peer.transportSafeArgumentTypes.add(Buffer.name); peer.transportSafeArgumentTypes.add(Uint8Array.name); @@ -35,6 +38,7 @@ function start(mainFilename: string) { console.error('peer host disconnected, exiting.'); process.exit(1); }); + return ret; } }