All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.fix.armeria.dynamic.request.options.DynamicRequestOptionsClient.kt Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
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