diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-09 18:54:20 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-09 18:54:20 +0200 |
commit | c0eade91d39d27e62e7586e75efb3616b4ba18af (patch) | |
tree | 58e17990d795a7b6a7daa427631112457599fe52 /src | |
parent | 705638771f9c89047fd3c247ef3ab98fa3a3fc33 (diff) |
Network: findPeer function
Diffstat (limited to 'src')
-rw-r--r-- | src/Erebos/Network.hs | 8 |
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 |