Peer: more refactoring
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 3 Sep 2015 12:34:11 +0000 (18:04 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 3 Sep 2015 12:34:11 +0000 (18:04 +0530)
src/FuncTorrent/Peer.hs

index 65372d9500dfc939c7959c65345860ad6a71c5c5..99906b074293bd260ec748cb5b027fdbf15c2aa9 100644 (file)
@@ -84,7 +84,13 @@ bitfieldToList bs = go bs 0
            setBits ++ go bs' (pos + 1)
 
 -- helper functions to manipulate PeerState
-toPeerState :: Handle -> Peer -> Bool -> Bool -> Bool -> Bool -> PState
+toPeerState :: Handle
+            -> Peer
+            -> Bool  -- ^ meChoking
+            -> Bool  -- ^ meInterested
+            -> Bool  -- ^ heChoking
+            -> Bool  -- ^ heInterested
+            -> PState
 toPeerState h p meCh meIn heCh heIn =
   PState { handle = h
          , peer = p
@@ -173,16 +179,15 @@ handlePeerMsgs p m peerId = do
   return ()
 
 msgLoop :: PieceMap -> FilePath -> StateT PState IO ()
-msgLoop pieceStatus file =
-  StateT(\pState -> do
-             let h = handle pState
-             msg <- getMsg h
-             liftIO $ putStrLn $ "<-- " ++ show msg ++ "from peer: " ++ show (peer pState)
-             case msg of
-               KeepAliveMsg -> do
-                 sendMsg h KeepAliveMsg
-                 liftIO $ putStrLn $ "--> " ++ "KeepAliveMsg to peer: " ++ show (peer pState)
-                 runStateT (msgLoop pieceStatus file) pState)
+msgLoop pieceStatus file = do
+  h <- gets handle
+  msg <- liftIO $ getMsg h
+  gets peer >>= (\p -> liftIO $ putStrLn $ "<-- " ++ show msg ++ "from peer: " ++ show p)
+  case msg of
+    KeepAliveMsg -> do
+      liftIO $ sendMsg h KeepAliveMsg
+      gets peer >>= (\p -> liftIO $ putStrLn $ "--> " ++ "KeepAliveMsg to peer: " ++ show p)
+      msgLoop pieceStatus file
 
 downloadPiece :: Handle -> Integer -> Integer -> IO ByteString
 downloadPiece h index pieceLength = do