
ru.fix.armeria.dynamic.request.options.DynamicRequestOptionsClient.kt Maven / Gradle / Ivy
package ru.fix.armeria.dynamic.request.options
import com.linecorp.armeria.client.Client
import com.linecorp.armeria.client.ClientRequestContext
import com.linecorp.armeria.client.HttpClient
import com.linecorp.armeria.client.SimpleDecoratingClient
import com.linecorp.armeria.common.Request
import com.linecorp.armeria.common.Response
import ru.fix.armeria.commons.asHttpClient
import ru.fix.dynamic.property.api.DynamicProperty
import java.time.Duration
import java.util.function.Function
/**
* Decorating client, purposed for setting request's timeout options
* based on current values of [DynamicProperty] properties.
*
* @property readTimeoutProperty property with value of [ClientRequestContext.responseTimeoutMillis]
* @property writeTimeoutProperty property with value of [ClientRequestContext.writeTimeoutMillis]
*/
class DynamicRequestOptionsClient private constructor(
delegate: Client,
private val readTimeoutProperty: DynamicProperty? = null,
private val writeTimeoutProperty: DynamicProperty? = null
) : SimpleDecoratingClient(delegate) {
override fun execute(ctx: ClientRequestContext, req: RequestT): ResponseT {
if (writeTimeoutProperty != null) {
ctx.setWriteTimeout(writeTimeoutProperty.get())
}
if (readTimeoutProperty != null) {
ctx.setResponseTimeout(readTimeoutProperty.get())
}
return unwrap().execute(ctx, req)
}
companion object {
@JvmStatic
fun newHttpDecorator(
writeTimeoutProperty: DynamicProperty,
readTimeoutProperty: DynamicProperty
): Function = Function {
DynamicRequestOptionsClient(it, readTimeoutProperty, writeTimeoutProperty).asHttpClient()
}
@JvmStatic
fun newHttpDecoratorWithReadTimeout(
readTimeoutProperty: DynamicProperty
): Function = Function {
DynamicRequestOptionsClient(it, readTimeoutProperty).asHttpClient()
}
@JvmStatic
fun newHttpDecoratorWithWriteTimeout(
writeTimeoutProperty: DynamicProperty
): Function = Function {
DynamicRequestOptionsClient(it, null, writeTimeoutProperty).asHttpClient()
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy