From 9c3e339123e1620744fbc19cd83f39b73f463c0c Mon Sep 17 00:00:00 2001 From: Bhasker Raj Shrestha Date: Thu, 28 Apr 2016 18:16:49 +0545 Subject: [PATCH] KobaltServer now actually uses the port specified in the command line argument --- src/main/kotlin/com/beust/kobalt/Main.kt | 2 +- .../kotlin/com/beust/kobalt/app/remote/KobaltServer.kt | 10 +++++----- .../kotlin/com/beust/kobalt/app/remote/ProcessUtil.kt | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/Main.kt b/src/main/kotlin/com/beust/kobalt/Main.kt index 547e0ccb..e389e979 100644 --- a/src/main/kotlin/com/beust/kobalt/Main.kt +++ b/src/main/kotlin/com/beust/kobalt/Main.kt @@ -158,7 +158,7 @@ private class Main @Inject constructor( jc.usage() } else if (args.serverMode) { // --server - val port = KobaltServer(args.force, + val port = KobaltServer(args.force, args.port, { buildFile -> initForBuildFile(BuildFile(Paths.get(buildFile), buildFile), args)}, { cleanUp() }) .call() diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt index 881b41d1..d6e82844 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt @@ -25,7 +25,7 @@ import java.util.concurrent.Callable * The callbacks are used to initialize and clean up the state before and after each command, so that Kobalt's state * can be properly reset, making the server reentrant. */ -class KobaltServer(val force: Boolean, +class KobaltServer(val force: Boolean, val port: Int = 1234, val initCallback: (String) -> List, val cleanUpCallback: () -> Unit) : Callable, ICommandSender { // var outgoing: PrintWriter? = null @@ -37,17 +37,17 @@ class KobaltServer(val force: Boolean, }.toMap() override fun call() : Int { - val port = ProcessUtil.findAvailablePort() + val availablePort = ProcessUtil.findAvailablePort(port) try { - if (createServerFile(port, force)) { - privateRun(port) + if (createServerFile(availablePort, force)) { + privateRun(availablePort) } } catch(ex: Exception) { ex.printStackTrace() } finally { deleteServerFile() } - return port + return availablePort } val SERVER_FILE = KFiles.joinDir(homeDir(KFiles.KOBALT_DOT_DIR, "kobaltServer.properties")) diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/ProcessUtil.kt b/src/main/kotlin/com/beust/kobalt/app/remote/ProcessUtil.kt index 982f8091..ff5b84ab 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/ProcessUtil.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/ProcessUtil.kt @@ -5,8 +5,10 @@ import java.net.Socket class ProcessUtil { companion object { - fun findAvailablePort(): Int { - for (i in 1234..65000) { + fun findAvailablePort(port: Int = 1234): Int { + if (isPortAvailable(port)) return port + + for (i in 1235..65000) { if (isPortAvailable(i)) return i } throw IllegalArgumentException("Couldn't find any port available, something is very wrong")