From 3b16e5e94daf370032fb521004fa9618131cb46f Mon Sep 17 00:00:00 2001 From: Sam Wilkins Date: Wed, 8 Jan 2020 07:59:14 -0500 Subject: more robust factory constraints --- src/server/Session/session.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/server/Session/session.ts b/src/server/Session/session.ts index 144d50c52..936357364 100644 --- a/src/server/Session/session.ts +++ b/src/server/Session/session.ts @@ -1,5 +1,5 @@ import { red, cyan, green, yellow, magenta, blue, white } from "colors"; -import { on, fork, setupMaster, Worker, isMaster } from "cluster"; +import { on, fork, setupMaster, Worker, isMaster, isWorker } from "cluster"; import { get } from "request-promise"; import { Utils } from "../../Utils"; import Repl, { ReplAction } from "../repl"; @@ -120,9 +120,13 @@ export namespace Session { private key: string | undefined; private repl: Repl; - public static Create(notifiers: Monitor.NotifierHooks) { - if (++Monitor.count > 1) { - throw new Error("Cannot create more than one monitor"); + public static Create(notifiers?: Monitor.NotifierHooks) { + if (isWorker) { + console.error(red("Monitor must be on the master process.")); + process.exit(1); + } else if (++Monitor.count > 1) { + console.error(("Cannot create more than one monitor.")); + process.exit(1); } else { return new Monitor(notifiers); } @@ -438,8 +442,11 @@ export namespace Session { private serverPort: number; public static Create(work: Function) { - if (++ServerWorker.count > 1) { - throw new Error("Cannot create more than one worker per thread"); + if (isMaster) { + throw new Error("Worker must be launched on a worker process."); + } else if (++ServerWorker.count > 1 || isMaster) { + process.send?.({ action: { message: "kill", args: { graceful: false } } }); + process.exit(1); } else { return new ServerWorker(work); } -- cgit v1.2.3-70-g09d2