From 2a004e9f4ce68831219a16b64bc1af3005f61fba Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 13:09:24 -0500 Subject: [PATCH 1/7] Add clear error message if port is in use --- packages/server/src/cli.ts | 13 ++++++++++++- packages/server/src/server.ts | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index 1b077a1a5b05..c26187d7db70 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -15,6 +15,7 @@ import { SharedProcess, SharedProcessState } from "./vscode/sharedProcess"; import opn = require("opn"); import * as commander from "commander"; +import { forEach } from 'vs/base/common/collections'; commander.version(process.env.VERSION || "development") .name("code-server") @@ -39,6 +40,10 @@ if (isCli) { require("nbin").shimNativeFs(buildDir); } +const bold = (text: string | number): string | number => { + return `\u001B[1m${text}\u001B[0m`; +}; + (async (): Promise => { const args = commander.args; const options = commander.opts() as { @@ -221,6 +226,7 @@ if (isCli) { logger.info("Starting webserver...", field("host", options.host), field("port", options.port)); app.server.listen(options.port, options.host); let clientId = 1; + app.wss.on("connection", (ws, req) => { const id = clientId++; @@ -234,7 +240,12 @@ if (isCli) { logger.info(`WebSocket closed \u001B[0m${req.url}`, field("client", id), field("code", code)); }); }); - + app.wss.on("error", (err: {code: string}) => { + if (err.code === "EADDRINUSE") { + logger.error(`Port ${bold(options.port)} is in use. Please free up port ${options.port} or specify another with the -p flag`); + process.exit(1); + } + }); if (!options.certKey && !options.cert) { logger.warn("No certificate specified. \u001B[1mThis could be insecure."); // TODO: fill in appropriate doc url diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index ae5a937465fc..6f77693f5fab 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -148,6 +148,7 @@ export const createApp = async (options: CreateAppOptions): Promise<{ handleTunnel(ws, port); } catch (ex) { + console.log("test") ws.close(TunnelCloseCode.Error, ex.toString()); } From b618f1dd314816ff97b5ac4076b8c07babab4127 Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 13:12:38 -0500 Subject: [PATCH 2/7] Add bold function for text/numbers --- packages/server/src/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index c26187d7db70..7247672eb28a 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -39,7 +39,7 @@ Error.stackTraceLimit = Infinity; if (isCli) { require("nbin").shimNativeFs(buildDir); } - +// Makes strings or numbers bold in stdout const bold = (text: string | number): string | number => { return `\u001B[1m${text}\u001B[0m`; }; From 8bbdb294ef43473ee91cf6b342c30f179d14f613 Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 13:15:37 -0500 Subject: [PATCH 3/7] remove unused dependency: --- packages/server/src/cli.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index 7247672eb28a..ed8cb5609b29 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -15,7 +15,6 @@ import { SharedProcess, SharedProcessState } from "./vscode/sharedProcess"; import opn = require("opn"); import * as commander from "commander"; -import { forEach } from 'vs/base/common/collections'; commander.version(process.env.VERSION || "development") .name("code-server") From 2a672d26cede7c34fa0cca248a526965deccdbf7 Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 13:17:48 -0500 Subject: [PATCH 4/7] remove unused line break --- packages/server/src/cli.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index ed8cb5609b29..43fdacff9de0 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -225,7 +225,6 @@ const bold = (text: string | number): string | number => { logger.info("Starting webserver...", field("host", options.host), field("port", options.port)); app.server.listen(options.port, options.host); let clientId = 1; - app.wss.on("connection", (ws, req) => { const id = clientId++; From 813afd38285d73ab279e10e55bb8f7f8118e7344 Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 13:20:50 -0500 Subject: [PATCH 5/7] Change logger message --- packages/server/src/cli.ts | 2 +- packages/server/src/server.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index 43fdacff9de0..f9b498a451df 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -240,7 +240,7 @@ const bold = (text: string | number): string | number => { }); app.wss.on("error", (err: {code: string}) => { if (err.code === "EADDRINUSE") { - logger.error(`Port ${bold(options.port)} is in use. Please free up port ${options.port} or specify another with the -p flag`); + logger.error(`Port ${bold(options.port)} is in use. Please free up port ${options.port} or specify a different port with the -p flag`); process.exit(1); } }); diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 6f77693f5fab..ae5a937465fc 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -148,7 +148,6 @@ export const createApp = async (options: CreateAppOptions): Promise<{ handleTunnel(ws, port); } catch (ex) { - console.log("test") ws.close(TunnelCloseCode.Error, ex.toString()); } From 19befdabe2cbfe7e958e6e60911fbdd01659de1f Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 14:25:54 -0500 Subject: [PATCH 6/7] Use NodeJS.ErrnoException type --- packages/server/src/cli.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index f9b498a451df..40022fc7157d 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -238,8 +238,8 @@ const bold = (text: string | number): string | number => { logger.info(`WebSocket closed \u001B[0m${req.url}`, field("client", id), field("code", code)); }); }); - app.wss.on("error", (err: {code: string}) => { - if (err.code === "EADDRINUSE") { + app.wss.on("error", (err: NodeJS.ErrnoException) => { + if (err) { logger.error(`Port ${bold(options.port)} is in use. Please free up port ${options.port} or specify a different port with the -p flag`); process.exit(1); } From 10a2e9ae89099717dbf749a46f0247f1086c47a6 Mon Sep 17 00:00:00 2001 From: John McCambridge Date: Wed, 3 Apr 2019 15:41:55 -0500 Subject: [PATCH 7/7] Add back check for error code --- packages/server/src/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index 40022fc7157d..d2a3505b5872 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -239,7 +239,7 @@ const bold = (text: string | number): string | number => { }); }); app.wss.on("error", (err: NodeJS.ErrnoException) => { - if (err) { + if (err.code === "EADDRINUSE") { logger.error(`Port ${bold(options.port)} is in use. Please free up port ${options.port} or specify a different port with the -p flag`); process.exit(1); }