diff --git a/src/clj/pmagnus/btcdata/web/middleware/core.clj b/src/clj/pmagnus/btcdata/web/middleware/core.clj index 545eb02..ea0a908 100644 --- a/src/clj/pmagnus/btcdata/web/middleware/core.clj +++ b/src/clj/pmagnus/btcdata/web/middleware/core.clj @@ -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 diff --git a/src/clj/pmagnus/btcdata/web/routes/api.clj b/src/clj/pmagnus/btcdata/web/routes/api.clj index 569db1f..6c602ec 100644 --- a/src/clj/pmagnus/btcdata/web/routes/api.clj +++ b/src/clj/pmagnus/btcdata/web/routes/api.clj @@ -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)