Есть ли в Ktor поточно-ориентированный метод, позволяющий получить статический доступ к текущему ApplicationCall? Я пытаюсь заставить работать следующий простой пример;
object Main {
fun start() {
val server = embeddedServer(Jetty, 8081) {
intercept(ApplicationCallPipeline.Call) {
// START: this will be more dynamic in the future, we don't want to pass ApplicationCall
Addon.processRequest()
// END: this will be more dynamic in the future, we don't want to pass ApplicationCall
call.respondText(output, ContentType.Text.Html, HttpStatusCode.OK)
return@intercept finish()
}
}
server.start(wait = true)
}
}
fun main(args: Array<String>) {
Main.start();
}
object Addon {
fun processRequest() {
val call = RequestUtils.getCurrentApplicationCall()
// processing of call.request.queryParameters
// ...
}
}
object RequestUtils {
fun getCurrentApplicationCall(): ApplicationCall {
// Here is where I am getting lost..
return null
}
}
Я хотел бы, чтобы ApplicationCall для текущего контекста был доступен статически из RequestUtils, чтобы я мог получить доступ к информации о запросе где угодно. Это, конечно, необходимо масштабировать, чтобы иметь возможность обрабатывать несколько запросов одновременно.
Я провел несколько экспериментов с внедрением зависимостей и ThreadLocal, но безуспешно.