tgrid
Version:
Grid Computing Framework for TypeScript
44 lines (36 loc) • 1.19 kB
text/typescript
import type cp from "child_process";
import { NodeModule } from "../../../../utils/internal/NodeModule";
import { WorkerConnector } from "../../WorkerConnector";
import { IWorkerCompiler } from "../IWorkerCompiler";
/**
* @internal
*/
export async function ProcessWorker(): Promise<IWorkerCompiler.Creator> {
const { fork } = await NodeModule.cp.get();
class ProcessWorker {
private process_: cp.ChildProcess;
public constructor(
jsFile: string,
options?: Partial<WorkerConnector.IConnectOptions>,
) {
this.process_ = fork(jsFile, {
execArgv: options?.execArgv,
stdio: options?.stdio,
cwd: options?.cwd,
...(options?.env ? { env: options.env } : {}),
});
}
public terminate(): void {
this.process_.kill();
}
public set onmessage(listener: (event: MessageEvent) => void) {
this.process_.on("message", (message) => {
listener({ data: message } as MessageEvent);
});
}
public postMessage(message: any): void {
this.process_.send(message);
}
}
return (<any>ProcessWorker) as IWorkerCompiler.Creator;
}