From e367bd62f125d417d728de35d8050936c7604599 Mon Sep 17 00:00:00 2001 From: Sabina Abdiganieva Date: Mon, 15 Jan 2024 22:04:19 +0300 Subject: [PATCH] implement devices config endpoint --- .../control/NumassControlApplication.kt | 6 +- .../inr/numass/control/NumassControlUtils.kt | 1 - .../inr/numass/control/readvac/ReadVac.kt | 2 +- numass-web-control/build.gradle.kts | 8 +++ .../main/java/inr/numass/webcontrol/Server.kt | 56 +++++++++++++------ 5 files changed, 53 insertions(+), 20 deletions(-) diff --git a/numass-control/src/main/kotlin/inr/numass/control/NumassControlApplication.kt b/numass-control/src/main/kotlin/inr/numass/control/NumassControlApplication.kt index a97b544..b3b4a95 100644 --- a/numass-control/src/main/kotlin/inr/numass/control/NumassControlApplication.kt +++ b/numass-control/src/main/kotlin/inr/numass/control/NumassControlApplication.kt @@ -9,7 +9,7 @@ import hep.dataforge.optional import javafx.scene.Scene import javafx.stage.Stage import org.slf4j.LoggerFactory -import tornadofx.* +import tornadofx.App import java.util.* /** @@ -46,8 +46,10 @@ abstract class NumassControlApplication : App() { abstract fun getDeviceMeta(config: Meta): Meta + fun getDeviceConfig() : Meta = getConfig(this).optional.orElseGet { readResourceMeta("config/devices.xml") } + private fun setupDevice(): D { - val config = getConfig(this).optional.orElseGet { readResourceMeta("config/devices.xml") } + val config = getDeviceConfig() val ctx = setupContext(config) val deviceConfig = getDeviceMeta(config) diff --git a/numass-control/src/main/kotlin/inr/numass/control/NumassControlUtils.kt b/numass-control/src/main/kotlin/inr/numass/control/NumassControlUtils.kt index 9d1c80e..528f169 100644 --- a/numass-control/src/main/kotlin/inr/numass/control/NumassControlUtils.kt +++ b/numass-control/src/main/kotlin/inr/numass/control/NumassControlUtils.kt @@ -100,7 +100,6 @@ fun getConfig(app: Application): Meta? { } } - fun findDeviceMeta(config: Meta, criterion: (Meta) -> Boolean): Meta? { return config.getMetaList("device").stream().filter(criterion).findFirst().nullable } diff --git a/numass-control/vac/src/main/kotlin/inr/numass/control/readvac/ReadVac.kt b/numass-control/vac/src/main/kotlin/inr/numass/control/readvac/ReadVac.kt index 969d8b0..6f45c13 100644 --- a/numass-control/vac/src/main/kotlin/inr/numass/control/readvac/ReadVac.kt +++ b/numass-control/vac/src/main/kotlin/inr/numass/control/readvac/ReadVac.kt @@ -14,7 +14,7 @@ import javafx.stage.Stage /** * @author Alexander Nozik */ -class ReadVac : NumassControlApplication() { +open class ReadVac : NumassControlApplication() { override val deviceFactory = VacDeviceFactory() diff --git a/numass-web-control/build.gradle.kts b/numass-web-control/build.gradle.kts index 38079d2..1cf1d6b 100644 --- a/numass-web-control/build.gradle.kts +++ b/numass-web-control/build.gradle.kts @@ -1,5 +1,6 @@ plugins { application + id("org.openjfx.javafxplugin") version "0.1.0" } group = "inr.numass" @@ -8,11 +9,18 @@ repositories { mavenCentral() } +javafx { + modules("javafx.controls", "javafx.web") + version = "16" +} + dependencies { testImplementation(platform("org.junit:junit-bom:5.9.1")) testImplementation("org.junit.jupiter:junit-jupiter") implementation("io.ktor:ktor-server-core:2.3.7") implementation("io.ktor:ktor-server-netty:2.3.7") + api(project(":numass-control:vac")) + api(project(":dataforge-core:dataforge-json")) } diff --git a/numass-web-control/src/main/java/inr/numass/webcontrol/Server.kt b/numass-web-control/src/main/java/inr/numass/webcontrol/Server.kt index 64fb20d..9e9e355 100644 --- a/numass-web-control/src/main/java/inr/numass/webcontrol/Server.kt +++ b/numass-web-control/src/main/java/inr/numass/webcontrol/Server.kt @@ -1,26 +1,50 @@ package inr.numass.webcontrol -import io.ktor.server.routing.* +import hep.dataforge.io.JSONMetaWriter +import inr.numass.control.readvac.ReadVac import io.ktor.http.* import io.ktor.server.application.* -import io.ktor.server.response.* -import io.ktor.server.request.* import io.ktor.server.engine.* -import io.ktor.server.netty.* -import java.nio.file.Paths import io.ktor.server.http.content.* -fun main() { +import io.ktor.server.netty.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import javafx.application.Application +import javafx.stage.Stage +import java.nio.file.Paths +class ReadVacSvr : ReadVac() { + var server : NettyApplicationEngine? = null var clickNumber = 0 - embeddedServer(Netty, port = 8000) { + override fun start(stage: Stage) { + super.start(stage) - routing { - staticFiles("/", Paths.get(this.javaClass.classLoader.getResource("index.html").toURI()).toFile().parentFile) - get ("/api") { - call.respondText(call.parameters.toString()) - } - get ("/api/clicker") { - call.respondText(clickNumber++.toString()) + this.server = embeddedServer(Netty, port = 8000) { + routing { + staticFiles("/", Paths.get(this.javaClass.classLoader.getResource("index.html").toURI()).toFile().parentFile) + get ("/api") { + call.respondText(call.parameters.toString()) + } + get ("/api/devices") { + call.respondOutputStream(ContentType.Application.Json, HttpStatusCode.OK, null) { + JSONMetaWriter.write(this, this@ReadVacSvr.getDeviceMeta(this@ReadVacSvr.getDeviceConfig())) + } + } + get ("/api/clicker") { + call.respondText(this@ReadVacSvr.clickNumber++.toString()) + } } } - }.start(wait = true) -} \ No newline at end of file + + this.server!!.start(wait = false) + } + + override fun stop() { + super.stop() + this.server?.stop() + } +} + +fun main() { + Application.launch(ReadVacSvr::class.java) +} +