DateCallback.kt
- package com.hexagonkt.http.server.callbacks
- import com.hexagonkt.http.model.Header
- import com.hexagonkt.http.handlers.HttpContext
- import com.hexagonkt.http.toHttpFormat
- import java.time.Instant
- import java.util.concurrent.atomic.AtomicLong
- import java.util.concurrent.atomic.AtomicReference
- /**
- * Callback that adds the `date` header to the response (caching its value).
- */
- class DateCallback(private val name: String = "date") : (HttpContext) -> HttpContext {
- private var lastUpdate: AtomicLong = AtomicLong(0)
- private var date: AtomicReference<String> = AtomicReference("")
- override fun invoke(context: HttpContext): HttpContext {
- val ms = System.currentTimeMillis()
- if (lastUpdate.get() + 1_000 <= ms) {
- lastUpdate.set(ms - (ms % 1_000))
- date.set(Instant.ofEpochMilli(lastUpdate.get()).toHttpFormat())
- }
- return context.send(headers = context.response.headers + Header(name, date.get())).next()
- }
- }