From 9b150c9142f644877de81e3d8e1dc92597793738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 14 Mar 2026 10:02:24 +0100 Subject: Drop websocket peer when connection is closed --- src/Main.hs | 2 +- src/WebSocket.hs | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Main.hs b/src/Main.hs index 0d6fc45..31b1436 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -205,7 +205,7 @@ setup = do peerList <- JS.getElementById "peer_list" watchPeers gs server peerList - startClient "a.discovery.erebosprotocol.net" 443 "" $ \conn -> do + startClient server "a.discovery.erebosprotocol.net" 443 "" $ \conn -> do void $ forkIO $ forever $ do msg <- receiveMessage conn receivedFromCustomAddress server conn msg diff --git a/src/WebSocket.hs b/src/WebSocket.hs index 6adbfd9..a1196ca 100644 --- a/src/WebSocket.hs +++ b/src/WebSocket.hs @@ -43,8 +43,8 @@ instance PeerAddressType Connection where sendBytesToAddress = sendMessage connectionToAddressClosed = closeConnection -startClient :: String -> Int -> String -> (Connection -> IO ()) -> IO () -startClient addr port path fun = do +startClient :: Server -> String -> Int -> String -> (Connection -> IO ()) -> IO () +startClient server addr port path fun = do connUnique <- newUnique let connAddress = "wss://" <> addr <> ":" <> show port <> "/" <> path connJS <- js_initWebSocket (toJSString connAddress) @@ -62,6 +62,12 @@ startClient addr port path fun = do bs <- unsafePackCStringFinalizer ptr len (free ptr) writeChan connInQueue bs + JS.addEventListener connJS "close" $ \_ -> do + dropPeerAddress server $ CustomPeerAddress conn + + JS.addEventListener connJS "error" $ \_ -> do + dropPeerAddress server $ CustomPeerAddress conn + sendMessage :: Connection -> ByteString -> IO () sendMessage Connection {..} bs = do -- cgit v1.2.3