diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-08-01 21:47:41 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-08-01 22:02:26 +0200 |
| commit | 75f243e6c5f1663157f934c706f069778507c165 (patch) | |
| tree | 463a19b77df88c0cf482e91477bbb96e2cb05295 /src/WebSocket.hs | |
| parent | c0d2d74524e015f9bbf339ba490764265156ae30 (diff) | |
Try reconnecting to the websocket connection when it's lost
Diffstat (limited to 'src/WebSocket.hs')
| -rw-r--r-- | src/WebSocket.hs | 24 |
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 () |