Я сейчас изучаю kotlin и вступил в следующий сценарий. На Ktor
сервере есть метод со следующей подписью:
fun Route.webSocket(protocol: String? = null, handler: suspend DefaultWebSocketServerSession.() -> Unit) {
webSocketRaw(protocol) {
proceedWebSocket(handler)
}
}
, где я должен взаимодействовать с ним примерно так:
embeddedServer(Netty, 8080) {
install(Routing) {
webSocket("/ws") {
// Handle websocket connection here
}
}
}
То есть websocket принимает labda, что это метод расширения DefaultWebSocketServerSession
и имеет свой контекст. Я хотел бы преобразовать эту лямбду в обработчик, чтобы я мог передать ее откуда-то еще, я думаю, она должна выглядеть примерно так:
embeddedServer(Netty, 8080) {
install(Routing) {
webSocket("/ws", myHandler::handle)
}
}
//...
fun suspend handle(context: DefaultWebSocketServerSession): Unit {
// Handle websocket connection here
}
Итак, мой вопрос, как мне преобразовать suspend DefaultWebSocketServerSession.() -> Unit
в (DefaultWebSocketServerSession) -> Unit
, или как мне реализовать обработчик с подписью suspend DefaultWebSocketServerSession.() -> Unit
, чтобы я мог передать его извне?
PS
Я знаю, что мог бы сделать это
embeddedServer(Netty, 8080) {
install(Routing) {
webSocket("/ws") {
myHandler.handle(this)
}
}
}
Но это не изящно