import Control.Concurrent (threadDelay)
import Control.Concurrent.MVar (readMVar, putMVar, isEmptyMVar, swapMVar)
-import Control.Monad (forever)
+import Control.Monad (forever, void)
import qualified Data.ByteString.Base16 as B16 (encode)
import Data.ByteString (ByteString)
import Data.ByteString.Char8 as BC (pack, unpack, splitAt)
return () -- $ pack (show e)
Right trackerInfo ->
case parseTrackerResponse trackerInfo of
- Left e -> return () -- e
+ Left e -> return ()
Right tresp -> do
- _ <- threadDelay $ fromIntegral (interval tresp)
ps <- isEmptyMVar $ connectedPeers tstate
if ps
- then do
- _ <- putMVar (connectedPeers tstate) (peers tresp)
- return ()
- else do
- _ <- swapMVar (connectedPeers tstate) (peers tresp)
- return ()
+ then
+ putMVar (connectedPeers tstate) (peers tresp)
+ else
+ void $ swapMVar (connectedPeers tstate) (peers tresp)
+ threadDelay $ fromIntegral (interval tresp)
parseTrackerResponse :: BVal -> Either ByteString TrackerResponse
parseTrackerResponse resp =