From f48728af7488a7c38f7fd7dd7e5f0c6c1840c124 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 25 Oct 2016 13:18:57 -0700 Subject: [PATCH] report typings installer process id to parent process --- src/server/server.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/server/server.ts b/src/server/server.ts index 6ddd267f56..fe3743c057 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -40,6 +40,7 @@ namespace ts.server { send(message: any, sendHandle?: any): void; on(message: "message", f: (m: any) => void): void; kill(): void; + pid: number; } interface NodeSocket { @@ -179,6 +180,7 @@ namespace ts.server { class NodeTypingsInstaller implements ITypingsInstaller { private installer: NodeChildProcess; + private installerPidReported = false; private socket: NodeSocket; private projectService: ProjectService; @@ -190,10 +192,25 @@ namespace ts.server { if (eventPort) { const s = net.connect({ port: eventPort }, () => { this.socket = s; + this.reportInstallerProcessId(); }); } } + private reportInstallerProcessId() { + if (this.installerPidReported) { + return; + } + if (this.socket && this.installer) { + this.sendEvent(0, "typingsInstallerPid", { pid: this.installer.pid }); + this.installerPidReported = true; + } + } + + private sendEvent(seq: number, event: string, body: any): void { + this.socket.write(formatMessage({ seq, type: "event", event, body }, this.logger, Buffer.byteLength, this.newLine), "utf8"); + } + attach(projectService: ProjectService) { this.projectService = projectService; if (this.logger.hasLevel(LogLevel.requestTime)) { @@ -222,6 +239,8 @@ namespace ts.server { this.installer = childProcess.fork(combinePaths(__dirname, "typingsInstaller.js"), args, { execArgv }); this.installer.on("message", m => this.handleMessage(m)); + this.reportInstallerProcessId(); + process.on("exit", () => { this.installer.kill(); }); @@ -245,7 +264,7 @@ namespace ts.server { } this.projectService.updateTypingsForProject(response); if (response.kind == "set" && this.socket) { - this.socket.write(formatMessage({ seq: 0, type: "event", message: response }, this.logger, Buffer.byteLength, this.newLine), "utf8"); + this.sendEvent(0, "setTypings", response); } } }