Use idiomatic undertow/websocket maps instead of raw WebSocket API

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 07:50:55 +01:00
co-authored by Claude Opus 4.6
parent faad73c4ef
commit 26420fd6ec
2 changed files with 8 additions and 17 deletions
@@ -22,7 +22,7 @@
[handler]
(fn [request]
(let [resp (handler request)]
(when (:status resp) resp))))
(when (or (:status resp) (:undertow/websocket resp)) resp))))
(defn wrap-base [{:keys [site-defaults-config cors-origin]}]
(let [origin (or cors-origin
+7 -16
View File
@@ -11,9 +11,7 @@
[reitit.ring.middleware.parameters :as parameters]
[reitit.swagger :as swagger])
(:import
[io.undertow.server HttpServerExchange]
[io.undertow.websockets WebSocketConnectionCallback WebSocketProtocolHandshakeHandler]
[io.undertow.websockets.core AbstractReceiveListener WebSockets WebSocketChannel]
[io.undertow.websockets.core WebSockets WebSocketChannel]
[java.time Instant ZoneId]
[java.time.format DateTimeFormatter]
[java.util Locale]
@@ -66,9 +64,6 @@
(let [queue (LinkedBlockingQueue.)
wkey (keyword (gensym "ws-"))
rkey (keyword (gensym "ws-r-"))]
(.set (.getReceiveSetter channel)
(proxy [AbstractReceiveListener] []))
(.resumeReceives channel)
(add-watch price-atom wkey
(fn [_ _ _ _] (.offer queue :update)))
(add-watch rates-atom rkey
@@ -91,16 +86,12 @@
(when (.isOpen channel)
(try (.close channel) (catch Exception _))))))))
(defn- ws-price-handler [{:keys [binance frankfurter]} req]
(let [^HttpServerExchange exchange (:server-exchange req)
price-atom (:latest-price binance)
rates-atom (:rates frankfurter)
callback (proxy [WebSocketConnectionCallback] []
(onConnect [_ws-exchange channel]
(start-ws-send-loop! channel price-atom rates-atom)))
handler (WebSocketProtocolHandshakeHandler. callback)]
(.handleRequest handler exchange)
nil))
(defn- ws-price-handler [{:keys [binance frankfurter]} _req]
(let [price-atom (:latest-price binance)
rates-atom (:rates frankfurter)]
{:undertow/websocket
{:on-open (fn [{:keys [^WebSocketChannel channel]}]
(start-ws-send-loop! channel price-atom rates-atom))}}))
(defn- latest-price-handler [{:keys [binance frankfurter]} _req]
(let [price-atom (:latest-price binance)