From 47327aef19954032adba2233e58ca188c133913f Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Thu, 25 Jul 2024 12:28:58 +0300 Subject: [PATCH] Add message flow output for PidDemo --- .space.kts | 45 ------------------- build.gradle.kts | 1 + .../controls/demo/DemoControllerView.kt | 6 ++- .../constructor/src/jvmMain/kotlin/PidDemo.kt | 18 ++++++-- gradle/libs.versions.toml | 5 +-- 5 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 .space.kts diff --git a/.space.kts b/.space.kts deleted file mode 100644 index c5dd962..0000000 --- a/.space.kts +++ /dev/null @@ -1,45 +0,0 @@ -import kotlin.io.path.readText - -job("Build") { - gradlew("spc.registry.jetbrains.space/p/sci/containers/kotlin-ci:1.0.3", "build") -} - -job("Publish") { - startOn { - gitPush { enabled = false } - } - container("spc.registry.jetbrains.space/p/sci/containers/kotlin-ci:1.0.3") { - env["SPACE_USER"] = "{{ project:space_user }}" - env["SPACE_TOKEN"] = "{{ project:space_token }}" - kotlinScript { api -> - - val spaceUser = System.getenv("SPACE_USER") - val spaceToken = System.getenv("SPACE_TOKEN") - - // write the version to the build directory - api.gradlew("version") - - //read the version from build file - val version = java.nio.file.Path.of("build/project-version.txt").readText() - - val revisionSuffix = if (version.endsWith("SNAPSHOT")) { - "-" + api.gitRevision().take(7) - } else { - "" - } - - api.space().projects.automation.deployments.start( - project = api.projectIdentifier(), - targetIdentifier = TargetIdentifier.Key("maps-kt"), - version = version+revisionSuffix, - // automatically update deployment status based on the status of a job - syncWithAutomationJob = true - ) - api.gradlew( - "publishAllPublicationsToSpaceRepository", - "-Ppublishing.space.user=\"$spaceUser\"", - "-Ppublishing.space.token=\"$spaceToken\"", - ) - } - } -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 7f7e534..b9b6d19 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,7 @@ import space.kscience.gradle.useSPCTeam plugins { id("space.kscience.gradle.project") + alias(libs.plugins.versions) } allprojects { diff --git a/demo/all-things/src/main/kotlin/space/kscience/controls/demo/DemoControllerView.kt b/demo/all-things/src/main/kotlin/space/kscience/controls/demo/DemoControllerView.kt index f107f56..fc72520 100644 --- a/demo/all-things/src/main/kotlin/space/kscience/controls/demo/DemoControllerView.kt +++ b/demo/all-things/src/main/kotlin/space/kscience/controls/demo/DemoControllerView.kt @@ -82,22 +82,24 @@ class DemoController : ContextAware { opcUaServer.startup() opcUaServer.serveDevices(deviceManager) - + //create a remote listener endpoint val listenerEndpoint = MagixEndpoint.rSocketWithWebSockets("localhost") + // subscribe remote endpoint listenerEndpoint.subscribe(DeviceManager.magixFormat).onEach { (magixMessage, deviceMessage) -> // print all messages that are not property change message if (deviceMessage !is PropertyChangedMessage) { println(">> ${json.encodeToString(MagixMessage.serializer(), magixMessage)}") } }.launchIn(this) + + // send description request listenerEndpoint.send( format = DeviceManager.magixFormat, payload = GetDescriptionMessage(), source = "listener", // target = "demoDevice" ) - } fun shutdown(): Job = context.launch { diff --git a/demo/constructor/src/jvmMain/kotlin/PidDemo.kt b/demo/constructor/src/jvmMain/kotlin/PidDemo.kt index 81a5923..9411321 100644 --- a/demo/constructor/src/jvmMain/kotlin/PidDemo.kt +++ b/demo/constructor/src/jvmMain/kotlin/PidDemo.kt @@ -19,10 +19,13 @@ import io.github.koalaplot.core.util.toString import io.github.koalaplot.core.xygraph.XYGraph import io.github.koalaplot.core.xygraph.rememberDoubleLinearAxisModel import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.filterIsInstance +import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.datetime.Instant import org.jetbrains.compose.splitpane.ExperimentalSplitPaneApi import org.jetbrains.compose.splitpane.HorizontalSplitPane +import space.kscience.controls.api.PropertyChangedMessage import space.kscience.controls.compose.NumberTextField import space.kscience.controls.compose.PlotNumericState import space.kscience.controls.compose.TimeAxisModel @@ -39,11 +42,9 @@ import space.kscience.controls.constructor.onTimer import space.kscience.controls.constructor.units.Kilograms import space.kscience.controls.constructor.units.Meters import space.kscience.controls.constructor.units.NumericalValue -import space.kscience.controls.manager.ClockManager -import space.kscience.controls.manager.DeviceManager -import space.kscience.controls.manager.clock -import space.kscience.controls.manager.install +import space.kscience.controls.manager.* import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.request import java.awt.Dimension import kotlin.math.PI import kotlin.math.sin @@ -165,6 +166,15 @@ fun main() = application { //bind pid parameters LaunchedEffect(Unit) { + + // start listening to local device hub + context.request(DeviceManager).hubMessageFlow() + .filterIsInstance() // filter only property change messages + //.filter { it.sourceDevice == "linearDrive".asName()} //optionally filter by device name + .onEach { + println("${it.sourceDevice} >> ${it.property} changed to ${it.value}") + }.launchIn(this) + snapshotFlow { pidParameters }.onEach { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 207964a..daf1fd6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,8 +31,6 @@ plc4j = "0.12.0" visionforge = "0.4.2" -versions = "0.51.0" - [libraries] dataforge-io = { module = "space.kscience:dataforge-io", version.ref = "dataforge" } @@ -89,4 +87,5 @@ koala-plots = { module = "io.github.koalaplot:koalaplot-core", version = "0.6.1" [plugins] -versions = { id = "com.github.ben-manes.versions", version.ref = "versions" } +versions = "com.github.ben-manes.versions:0.51.0" +versions-update = "nl.littlerobots.version-catalog-update:0.8.4"