diff --git a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/AbstractServiceProcess.kt b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/AbstractServiceProcess.kt index d2417ad..f7c1c66 100644 --- a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/AbstractServiceProcess.kt +++ b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/AbstractServiceProcess.kt @@ -6,7 +6,7 @@ abstract class AbstractServiceProcess { abstract fun start( service: ICloudService, - command: String + command: MutableList ) abstract fun stop() diff --git a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/ProcessRegistry.kt b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/ProcessRegistry.kt index 4ef361f..56cc733 100644 --- a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/ProcessRegistry.kt +++ b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/ProcessRegistry.kt @@ -1,11 +1,12 @@ package me.blueamethyst.bluecloud.runner -import me.blueamethyst.bluecloud.runner.jvm.JvmServiceProcess +import me.blueamethyst.bluecloud.runner.impl.JvmServiceProcess import kotlin.reflect.KClass class ProcessRegistry { private val processes = mutableMapOf>( - "jvm" to JvmServiceProcess::class + "jvm" to JvmServiceProcess::class, + "screen" to JvmServiceProcess::class ) fun registerServiceProcess(name: String, process: KClass) { diff --git a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/jvm/JvmServiceProcess.kt b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/JvmServiceProcess.kt similarity index 85% rename from runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/jvm/JvmServiceProcess.kt rename to runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/JvmServiceProcess.kt index 55b8c49..6421508 100644 --- a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/jvm/JvmServiceProcess.kt +++ b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/JvmServiceProcess.kt @@ -1,4 +1,4 @@ -package me.blueamethyst.bluecloud.runner.jvm +package me.blueamethyst.bluecloud.runner.impl import me.blueamethyst.bluecloud.api.service.ICloudService import me.blueamethyst.bluecloud.runner.AbstractServiceProcess @@ -10,7 +10,7 @@ class JvmServiceProcess: AbstractServiceProcess() { lateinit var process: Process; private set lateinit var directory: File; private set - lateinit var startCommand: String; private set + lateinit var startCommand: MutableList; private set /* override fun start( @@ -25,7 +25,7 @@ class JvmServiceProcess: AbstractServiceProcess() { } */ - override fun start(service: ICloudService, command: String) { + override fun start(service: ICloudService, command: MutableList) { startCommand = command createProcess() } diff --git a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreen.kt b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreen.kt new file mode 100644 index 0000000..358df87 --- /dev/null +++ b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreen.kt @@ -0,0 +1,22 @@ +package me.blueamethyst.bluecloud.runner.impl.screen + +import java.nio.file.Path + +class UnixScreen( + val name: String, + val command: MutableList, +) { + + fun create(): ProcessBuilder { + return ProcessBuilder(buildCommand()) + } + + private fun buildCommand(): MutableList { + return buildList { + add("screen") + add("-dmS") + add(name) + addAll(command) + }.toMutableList() + } +} \ No newline at end of file diff --git a/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreenServiceProcess.kt b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreenServiceProcess.kt new file mode 100644 index 0000000..3532fe1 --- /dev/null +++ b/runner/src/main/kotlin/me/blueamethyst/bluecloud/runner/impl/screen/UnixScreenServiceProcess.kt @@ -0,0 +1,22 @@ +package me.blueamethyst.bluecloud.runner.impl.screen + +import me.blueamethyst.bluecloud.api.service.ICloudService +import me.blueamethyst.bluecloud.runner.AbstractServiceProcess + +class UnixScreenServiceProcess: AbstractServiceProcess() { + lateinit var unixScreen: UnixScreen; private set + lateinit var process: Process; private set + + override fun start(service: ICloudService, command: MutableList) { + unixScreen = UnixScreen("bluecloud-${service.getId()}", command) + process = unixScreen.create().start() + } + + override fun stop() { + process.destroy() + } + + override fun kill() { + process.destroy() + } +} \ No newline at end of file