summaryrefslogtreecommitdiff
path: root/src/WebSocket.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-08-01 21:47:41 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-08-01 22:02:26 +0200
commit75f243e6c5f1663157f934c706f069778507c165 (patch)
tree463a19b77df88c0cf482e91477bbb96e2cb05295 /src/WebSocket.hs
parentc0d2d74524e015f9bbf339ba490764265156ae30 (diff)
Try reconnecting to the websocket connection when it's lost
Diffstat (limited to 'src/WebSocket.hs')
-rw-r--r--src/WebSocket.hs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/WebSocket.hs b/src/WebSocket.hs
index 71ff6d6..685ed90 100644
--- a/src/WebSocket.hs
+++ b/src/WebSocket.hs
@@ -75,11 +75,25 @@ startClient server addr port path fun = do
startDefaultWebSocketConnections :: Server -> IO ()
startDefaultWebSocketConnections server = do
- startClient server "a.discovery.erebosprotocol.net" 443 "" $ \conn -> do
- void $ forkIO $ forever $ do
- msg <- receiveMessage conn
- receivedFromCustomAddress server conn msg
- void $ serverPeerCustom server conn
+ peerVar <- newEmptyMVar
+ let doStart = do
+ startClient server "a.discovery.erebosprotocol.net" 443 "" $ \conn -> do
+ putMVar peerVar =<< serverPeerCustom server conn
+ void $ forkIO $ forever $ do
+ msg <- receiveMessage conn
+ receivedFromCustomAddress server conn msg
+
+ void $ forkIO $ void $ forever $ do
+ peer <- getNextPeerChange server
+ isPeerDropped peer >>= \case
+ True -> do
+ wsPeer <- takeMVar peerVar
+ if peer == wsPeer
+ then doStart
+ else putMVar peerVar wsPeer
+ False -> return ()
+
+ doStart
sendMessage :: Connection -> ByteString -> IO ()