diff options
Diffstat (limited to 'kvision-modules')
5 files changed, 43 insertions, 41 deletions
diff --git a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt index 52c0f7c3..06e150e4 100644 --- a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt +++ b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/RemoteAgent.kt @@ -198,7 +198,7 @@ interface RemoteAgent { } } - private fun findEnumValue(kClass: KClass<Any>, value: String): Any? { + fun findEnumValue(kClass: KClass<Any>, value: String): Any? { return (kClass.asDynamic().jClass.values() as Array<Any>).find { it.asDynamic().name == value } diff --git a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt index c4f4ed6d..465fbf59 100644 --- a/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt +++ b/kvision-modules/kvision-remote/src/main/kotlin/pl/treksoft/kvision/remote/Utils.kt @@ -22,8 +22,9 @@ package pl.treksoft.kvision.remote import kotlinx.serialization.SerializationStrategy -import kotlinx.serialization.context.SimpleModule import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.modules.serializersModuleOf import pl.treksoft.kvision.types.JsonDateSerializer import kotlin.browser.window import kotlin.js.Date @@ -45,13 +46,12 @@ fun obj(init: dynamic.() -> Unit): dynamic { */ object JSON { - val plain = Json().apply { - install(SimpleModule(Date::class, JsonDateSerializer)) - } + val plain = Json(context = serializersModuleOf(Date::class, JsonDateSerializer)) - val nonstrict = Json(strictMode = false).apply { - install(SimpleModule(Date::class, JsonDateSerializer)) - } + val nonstrict = Json( + configuration = JsonConfiguration.Stable.copy(strictMode = false), + context = serializersModuleOf(Date::class, JsonDateSerializer) + ) /** * An extension function to convert Serializable object to JS dynamic object diff --git a/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index ca08b080..c3c179fc 100644 --- a/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-jooby/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -30,8 +30,6 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.jooby.Kooby @@ -344,16 +342,19 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: ws.close() } launch { - val requestChannel = incoming.map { - val jsonRpcRequest = getParameter<JsonRpcRequest>(it) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() coroutineScope { + launch { + for (p in incoming) { + val jsonRpcRequest = getParameter<JsonRpcRequest>(p) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + requestChannel.close() + } launch(Dispatchers.IO) { for (p in responseChannel) { val text = mapper.writeValueAsString( diff --git a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index 11771cfa..3c5391b6 100644 --- a/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-ktor/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -44,8 +44,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.slf4j.Logger @@ -378,20 +376,23 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: webSocketRequests["/kvws/$routeDef"] = { val wsInjector = call.injector.createChildInjector(WsSessionModule(this)) val service = wsInjector.getInstance(serviceClass.java) - val requestChannel = incoming.map { - (it as? Frame.Text)?.readText()?.let { text -> - val jsonRpcRequest = getParameter<JsonRpcRequest>(text) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() val session = this coroutineScope { launch { + for (p in incoming) { + (p as? Frame.Text)?.readText()?.let { text -> + val jsonRpcRequest = getParameter<JsonRpcRequest>(text) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + } + requestChannel.close() + } + launch { for (p in responseChannel) { val text = mapper.writeValueAsString( JsonRpcResponse( diff --git a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt index af185f19..d2b4f7ea 100644 --- a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt +++ b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt @@ -23,14 +23,11 @@ package pl.treksoft.kvision.remote import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import kotlinx.coroutines.CoroutineStart -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel -import kotlinx.coroutines.channels.filterNotNull -import kotlinx.coroutines.channels.map import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.slf4j.Logger @@ -420,17 +417,20 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass: WebSocketSessionHolder.webSocketSession = webSocketSession ctx.getBean(serviceClass.java) } - val requestChannel = incoming.map { - val jsonRpcRequest = getParameter<JsonRpcRequest>(it) - if (jsonRpcRequest.params.size == 1) { - getParameter<PAR1>(jsonRpcRequest.params[0]) - } else { - null - } - }.filterNotNull() + val requestChannel = Channel<PAR1>() val responseChannel = Channel<PAR2>() coroutineScope { launch { + for (p in incoming) { + val jsonRpcRequest = getParameter<JsonRpcRequest>(p) + if (jsonRpcRequest.params.size == 1) { + val par = getParameter<PAR1>(jsonRpcRequest.params[0]) + requestChannel.send(par) + } + } + requestChannel.close() + } + launch { for (p in responseChannel) { val text = mapper.writeValueAsString( JsonRpcResponse( |