package refactor
This commit is contained in:
parent
d79d345a44
commit
5e9cbab94d
@ -13,7 +13,7 @@ kotlin {
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation(project(":magix:magix-service"))
|
||||
implementation(project(":magix:magix-rsocket"))
|
||||
implementation(project(":controls-core"))
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
@file:OptIn(ExperimentalCoroutinesApi::class, KtorExperimentalAPI::class, FlowPreview::class)
|
||||
|
||||
package ru.mipt.npm.controls.server
|
||||
|
||||
@ -18,12 +17,9 @@ import io.ktor.routing.routing
|
||||
import io.ktor.server.cio.CIO
|
||||
import io.ktor.server.engine.ApplicationEngine
|
||||
import io.ktor.server.engine.embeddedServer
|
||||
import io.ktor.util.KtorExperimentalAPI
|
||||
import io.ktor.util.getValue
|
||||
import io.ktor.websocket.WebSockets
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.FlowPreview
|
||||
import kotlinx.html.*
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
@ -74,7 +70,6 @@ public fun ApplicationEngine.whenStarted(callback: Application.() -> Unit) {
|
||||
|
||||
public const val WEB_SERVER_TARGET: String = "@webServer"
|
||||
|
||||
@OptIn(KtorExperimentalAPI::class)
|
||||
public fun Application.deviceModule(
|
||||
manager: DeviceManager,
|
||||
deviceNames: Collection<String> = manager.devices.keys.map { it.toString() },
|
||||
@ -114,7 +109,8 @@ public fun Application.deviceModule(
|
||||
}
|
||||
deviceNames.forEach { deviceName ->
|
||||
val device =
|
||||
manager.getOrNull(deviceName) ?: error("The device with name $deviceName not found in $manager")
|
||||
manager.getOrNull(deviceName)
|
||||
?: error("The device with name $deviceName not found in $manager")
|
||||
div {
|
||||
id = deviceName
|
||||
h2 { +deviceName }
|
||||
|
@ -4,7 +4,6 @@ import io.ktor.network.selector.ActorSelectorManager
|
||||
import io.ktor.network.sockets.aSocket
|
||||
import io.ktor.network.sockets.openReadChannel
|
||||
import io.ktor.network.sockets.openWriteChannel
|
||||
import io.ktor.util.KtorExperimentalAPI
|
||||
import io.ktor.utils.io.consumeEachBufferRange
|
||||
import io.ktor.utils.io.core.Closeable
|
||||
import io.ktor.utils.io.writeAvailable
|
||||
@ -29,7 +28,6 @@ public class KtorTcpPort internal constructor(
|
||||
|
||||
override fun toString(): String = "port[tcp:$host:$port]"
|
||||
|
||||
@OptIn(KtorExperimentalAPI::class)
|
||||
private val futureSocket = scope.async {
|
||||
aSocket(ActorSelectorManager(Dispatchers.IO)).tcp().connect(InetSocketAddress(host, port))
|
||||
}
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
@ -5,6 +5,6 @@ plugins {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":magix:magix-service"))
|
||||
implementation(project(":magix:magix-rsocket"))
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk9:${ru.mipt.npm.gradle.KScienceVersions.coroutinesVersion}")
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ import kotlinx.serialization.KSerializer
|
||||
import ru.mipt.npm.magix.api.MagixEndpoint
|
||||
import ru.mipt.npm.magix.api.MagixMessage
|
||||
import ru.mipt.npm.magix.api.MagixMessageFilter
|
||||
import ru.mipt.npm.magix.service.RSocketMagixEndpoint
|
||||
import ru.mipt.npm.magix.service.withTcp
|
||||
import ru.mipt.npm.magix.rsocket.RSocketMagixEndpoint
|
||||
import ru.mipt.npm.magix.rsocket.withTcp
|
||||
import java.util.concurrent.Flow
|
||||
|
||||
public class ControlsMagixClient<T>(
|
||||
|
@ -3,25 +3,24 @@ plugins {
|
||||
`maven-publish`
|
||||
}
|
||||
|
||||
description = """
|
||||
Magix endpoint (client) based on RSocket
|
||||
""".trimIndent()
|
||||
|
||||
kscience {
|
||||
useSerialization {
|
||||
json()
|
||||
}
|
||||
}
|
||||
|
||||
val dataforgeVersion: String by rootProject.extra
|
||||
val ktorVersion: String by rootProject.extra
|
||||
val rsocketVersion: String by rootProject.extra
|
||||
|
||||
repositories{
|
||||
maven("https://maven.pkg.github.com/altavir/ktor-client-sse")
|
||||
}
|
||||
|
||||
kotlin {
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
api(project(":magix:magix-api"))
|
||||
api(projects.magix.magixApi)
|
||||
implementation("io.ktor:ktor-client-core:$ktorVersion")
|
||||
implementation("io.rsocket.kotlin:rsocket-transport-ktor-client:$rsocketVersion")
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package ru.mipt.npm.magix.service
|
||||
package ru.mipt.npm.magix.rsocket
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.features.websocket.WebSockets
|
||||
@ -51,6 +51,9 @@ public class RSocketMagixEndpoint<T>(
|
||||
connectionConfig(rSocketConfig)
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a websocket based endpoint connected to [host], [port] and given routing [path]
|
||||
*/
|
||||
public suspend fun <T> withWebSockets(
|
||||
host: String,
|
||||
port: Int,
|
@ -1,4 +1,4 @@
|
||||
package ru.mipt.npm.magix.service
|
||||
package ru.mipt.npm.magix.rsocket
|
||||
|
||||
import io.ktor.network.selector.ActorSelectorManager
|
||||
import io.ktor.network.sockets.SocketOptions
|
||||
@ -11,7 +11,7 @@ import kotlin.coroutines.coroutineContext
|
||||
|
||||
|
||||
/**
|
||||
* Create a plain TCP based [RSocketMagixEndpoint]
|
||||
* Create a plain TCP based [RSocketMagixEndpoint] connected to [host] and [port]
|
||||
*/
|
||||
public suspend fun <T> RSocketMagixEndpoint.Companion.withTcp(
|
||||
host: String,
|
@ -5,7 +5,6 @@ import io.ktor.network.sockets.aSocket
|
||||
import io.ktor.server.cio.CIO
|
||||
import io.ktor.server.engine.ApplicationEngine
|
||||
import io.ktor.server.engine.embeddedServer
|
||||
import io.ktor.util.KtorExperimentalAPI
|
||||
import io.rsocket.kotlin.core.RSocketServer
|
||||
import io.rsocket.kotlin.transport.ktor.serverTransport
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -14,7 +13,6 @@ import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import ru.mipt.npm.magix.api.MagixEndpoint.Companion.DEFAULT_MAGIX_RAW_PORT
|
||||
import ru.mipt.npm.magix.api.MagixEndpoint.Companion.DEFAULT_MAGIX_WS_PORT
|
||||
|
||||
@OptIn(KtorExperimentalAPI::class)
|
||||
public fun CoroutineScope.startMagixServer(
|
||||
port: Int = DEFAULT_MAGIX_WS_PORT,
|
||||
rawSocketPort: Int = DEFAULT_MAGIX_RAW_PORT,
|
||||
|
@ -10,7 +10,6 @@ import io.ktor.routing.post
|
||||
import io.ktor.routing.route
|
||||
import io.ktor.routing.routing
|
||||
import io.ktor.serialization.json
|
||||
import io.ktor.util.KtorExperimentalAPI
|
||||
import io.ktor.util.getValue
|
||||
import io.ktor.websocket.WebSockets
|
||||
import io.rsocket.kotlin.ConnectionAcceptor
|
||||
@ -70,7 +69,6 @@ internal fun CoroutineScope.magixAcceptor(magixFlow: MutableSharedFlow<GenericMa
|
||||
/**
|
||||
* Create a message filter from call parameters
|
||||
*/
|
||||
@OptIn(KtorExperimentalAPI::class)
|
||||
private fun ApplicationCall.buildFilter(): MagixMessageFilter {
|
||||
val query = request.queryParameters
|
||||
|
||||
|
@ -5,7 +5,6 @@ import io.ktor.http.CacheControl
|
||||
import io.ktor.http.ContentType
|
||||
import io.ktor.response.cacheControl
|
||||
import io.ktor.response.respondBytesWriter
|
||||
import io.ktor.util.KtorExperimentalAPI
|
||||
import io.ktor.utils.io.ByteWriteChannel
|
||||
import io.ktor.utils.io.writeStringUtf8
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
@ -30,7 +29,6 @@ public suspend fun ByteWriteChannel.writeSseFlow(events: Flow<SseEvent>): Unit =
|
||||
flush()
|
||||
}
|
||||
|
||||
@OptIn(KtorExperimentalAPI::class)
|
||||
public suspend fun ApplicationCall.respondSse(events: Flow<SseEvent>) {
|
||||
response.cacheControl(CacheControl.NoCache(null))
|
||||
respondBytesWriter(contentType = ContentType.Text.EventStream) {
|
||||
|
10
magix/magix-zmq/build.gradle.kts
Normal file
10
magix/magix-zmq/build.gradle.kts
Normal file
@ -0,0 +1,10 @@
|
||||
plugins {
|
||||
id("ru.mipt.npm.gradle.jvm")
|
||||
`maven-publish`
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
api(projects.magix.magixApi)
|
||||
implementation("org.zeromq:jeromq:0.5.2")
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package ru.mipt.npm.magix.zmq
|
||||
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.serialization.KSerializer
|
||||
import ru.mipt.npm.magix.api.MagixEndpoint
|
||||
import ru.mipt.npm.magix.api.MagixMessage
|
||||
import ru.mipt.npm.magix.api.MagixMessageFilter
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
class ZmqMagixEndpoint<T>(
|
||||
private val coroutineContext: CoroutineContext,
|
||||
private val payloadSerializer: KSerializer<T>,
|
||||
) : MagixEndpoint<T> {
|
||||
|
||||
override fun subscribe(filter: MagixMessageFilter): Flow<MagixMessage<T>> {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override suspend fun broadcast(message: MagixMessage<T>) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
rootProject.name = "controls.kt"
|
||||
rootProject.name = "controls"
|
||||
|
||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||
|
||||
pluginManagement {
|
||||
val toolsVersion = "0.10.0"
|
||||
@ -26,12 +28,9 @@ include(
|
||||
":magix",
|
||||
":magix:magix-api",
|
||||
":magix:magix-server",
|
||||
":magix:magix-service",
|
||||
":magix:magix-rsocket",
|
||||
":magix:magix-java-client",
|
||||
":magix:magix-zmq",
|
||||
":controls-magix-client",
|
||||
":motors"
|
||||
)
|
||||
|
||||
//includeBuild("../dataforge-core")
|
||||
//includeBuild("../plotly.kt")
|
||||
include("magix-java-client")
|
||||
|
Loading…
Reference in New Issue
Block a user