summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-07-09 18:54:20 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-07-09 18:54:20 +0200
commitc0eade91d39d27e62e7586e75efb3616b4ba18af (patch)
tree58e17990d795a7b6a7daa427631112457599fe52 /src
parent705638771f9c89047fd3c247ef3ab98fa3a3fc33 (diff)
Network: findPeer function
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Network.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs
index 8da4c8d..aff04e4 100644
--- a/src/Erebos/Network.hs
+++ b/src/Erebos/Network.hs
@@ -23,6 +23,7 @@ module Erebos.Network (
#ifdef ENABLE_ICE_SUPPORT
serverPeerIce,
#endif
+ findPeer,
dropPeer,
isPeerDropped,
sendToPeer, sendManyToPeer,
@@ -879,6 +880,13 @@ serverPeer' server paddr = do
writeFlow (serverControlFlow server) (RequestConnection paddr)
return peer
+findPeer :: Server -> (Peer -> IO Bool) -> IO (Maybe Peer)
+findPeer server test = withMVar (serverPeers server) (helper . M.elems)
+ where
+ helper (p : ps) = test p >>= \case True -> return (Just p)
+ False -> helper ps
+ helper [] = return Nothing
+
dropPeer :: MonadIO m => Peer -> m ()
dropPeer peer = liftIO $ do
modifyMVar_ (serverPeers $ peerServer peer) $ \pvalue -> do