From 3fbb440436ccef42d791bf5b43be2b221549cebf Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 10 Feb 2022 00:02:38 +0100 Subject: [PATCH] :sparkles: Handle EOF on websocket write/ping operations --- backend/src/app/util/websocket.clj | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/src/app/util/websocket.clj b/backend/src/app/util/websocket.clj index 994070797e..b82783e3cf 100644 --- a/backend/src/app/util/websocket.clj +++ b/backend/src/app/util/websocket.clj @@ -15,7 +15,9 @@ [clojure.core.async :as a] [yetti.websocket :as yws]) (:import - java.nio.ByteBuffer)) + java.nio.ByteBuffer + org.eclipse.jetty.io.EofException)) + (declare decode-beat) (declare encode-beat) @@ -132,17 +134,25 @@ (defn- ws-send! [conn s] (let [ch (a/chan 1)] - (yws/send! conn s (fn [e] - (when e (a/offer! ch e)) - (a/close! ch))) + (try + (yws/send! conn s (fn [e] + (when e (a/offer! ch e)) + (a/close! ch))) + (catch EofException cause + (a/offer! ch cause) + (a/close! ch))) ch)) (defn- ws-ping! [conn s] (let [ch (a/chan 1)] - (yws/ping! conn s (fn [e] - (when e (a/offer! ch e)) - (a/close! ch))) + (try + (yws/ping! conn s (fn [e] + (when e (a/offer! ch e)) + (a/close! ch))) + (catch EofException cause + (a/offer! ch cause) + (a/close! ch))) ch)) (defn- encode-beat