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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user