diff --git a/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.api b/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.api index feb0180fb..a2a1fc702 100644 --- a/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.api +++ b/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.api @@ -27,7 +27,7 @@ public final class kotlinx/rpc/krpc/ktor/server/KrpcRoute : io/ktor/server/webso } public final class kotlinx/rpc/krpc/ktor/server/KtorServerDslKt { - public static final fun rpc (Lio/ktor/server/routing/Route;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static final fun rpc (Lio/ktor/server/routing/Route;Lkotlin/jvm/functions/Function1;)V + public static final fun rpc (Lio/ktor/server/routing/Route;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V + public static final fun rpc (Lio/ktor/server/routing/Route;Lkotlin/jvm/functions/Function2;)V } diff --git a/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.klib.api b/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.klib.api index b0be659ff..92862d68a 100644 --- a/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.klib.api +++ b/krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.klib.api @@ -47,5 +47,5 @@ final class kotlinx.rpc.krpc.ktor.server/KrpcRoute : io.ktor.server.websocket/De final val kotlinx.rpc.krpc.ktor.server/Krpc // kotlinx.rpc.krpc.ktor.server/Krpc|{}Krpc[0] final fun (): io.ktor.server.application/ApplicationPlugin // kotlinx.rpc.krpc.ktor.server/Krpc.|(){}[0] -final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/Function1) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.Function1){}[0] -final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/String, kotlin/Function1) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.String;kotlin.Function1){}[0] +final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin.coroutines/SuspendFunction1) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.coroutines.SuspendFunction1){}[0] +final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/String, kotlin.coroutines/SuspendFunction1) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.String;kotlin.coroutines.SuspendFunction1){}[0] diff --git a/krpc/krpc-ktor/krpc-ktor-server/src/commonMain/kotlin/kotlinx/rpc/krpc/ktor/server/KtorServerDsl.kt b/krpc/krpc-ktor/krpc-ktor-server/src/commonMain/kotlin/kotlinx/rpc/krpc/ktor/server/KtorServerDsl.kt index ae4e5e574..e7e957513 100644 --- a/krpc/krpc-ktor/krpc-ktor-server/src/commonMain/kotlin/kotlinx/rpc/krpc/ktor/server/KtorServerDsl.kt +++ b/krpc/krpc-ktor/krpc-ktor-server/src/commonMain/kotlin/kotlinx/rpc/krpc/ktor/server/KtorServerDsl.kt @@ -20,7 +20,7 @@ import kotlinx.rpc.krpc.rpcServerConfig * @param builder Builder function to configure RPC server. */ @KtorDsl -public fun Route.rpc(path: String, builder: KrpcRoute.() -> Unit) { +public fun Route.rpc(path: String, builder: suspend KrpcRoute.() -> Unit) { route(path) { rpc(builder) } @@ -34,16 +34,19 @@ public fun Route.rpc(path: String, builder: KrpcRoute.() -> Unit) { * @param builder Builder function to configure RPC server. */ @KtorDsl -public fun Route.rpc(builder: KrpcRoute.() -> Unit) { +public fun Route.rpc(builder: suspend KrpcRoute.() -> Unit) { createRpcServer(builder) } -private fun Route.createRpcServer(rpcRouteBuilder: KrpcRoute.() -> Unit) { +private fun Route.createRpcServer(rpcRouteBuilder: suspend KrpcRoute.() -> Unit) { application.pluginOrNull(WebSockets) ?: error("RPC for server requires $WebSockets plugin to be installed firstly") webSocket { - val rpcRoute = KrpcRoute(this).apply(rpcRouteBuilder) + val rpcRoute = KrpcRoute(this).apply { + rpcRouteBuilder() + } + val pluginConfigBuilder = application.attributes.getOrNull(KrpcServerPluginAttributesKey) val rpcConfig = pluginConfigBuilder?.apply(rpcRoute.configBuilder)?.build() ?: rpcServerConfig(rpcRoute.configBuilder)