]> git.rkrishnan.org Git - functorrent.git/commitdiff
more refactoring around msgLoop
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Fri, 24 Jul 2015 04:42:39 +0000 (10:12 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Fri, 24 Jul 2015 04:42:39 +0000 (10:12 +0530)
src/FuncTorrent/Peer.hs

index 0d70f9f391b385e241ddc88f1dde16902b4dec34..605d9ff686e7835fa0e4045e2a6cd03777aba8b2 100644 (file)
@@ -192,28 +192,25 @@ createDummyFile path size =
 
 -- loop1 :: shake hands with all peers, find out the pieces they have, form PieceData.
 -- recvMsg :: Peer -> Handle -> Msg
-msgLoop :: PeerState -> ByteString -> IO ()
-msgLoop state pieceHash =
-  let numPieces = (toInteger . (`quot` 20) . BC.length) pieceHash
-      pieceStatus = mkPieceMap numPieces pieceHash
-  in
-   forever $ do
-     -- if meInterested and he NOT Choking, pick a piece to download
-     -- and send a requestmsg.
-     msg <- getMsg (handle state)
-     putStrLn $ "got a " ++ show msg
-     case msg of
-      BitFieldMsg bss -> do
-        let pieceList = bitfieldToList (unpack bss)
-        print pieceList
-        -- for each pieceIndex in pieceList, make an entry in the pieceStatus
-        -- map with pieceIndex as the key and modify the value to add the peer.
-
-        -- download each of the piece in order
-      UnChokeMsg -> do
-        print msg
-        msgLoop (state {heChoking = False}) pieceHash
-      _ -> print msg
+msgLoop :: PeerState -> PieceMap -> IO ()
+msgLoop state pieceStatus =
+  forever $ do
+    -- if meInterested and he NOT Choking, pick a piece to download
+    -- and send a requestmsg.
+    msg <- getMsg (handle state)
+    putStrLn $ "got a " ++ show msg
+    case msg of
+     BitFieldMsg bss -> do
+       let pieceList = bitfieldToList (unpack bss)
+       print pieceList
+       -- for each pieceIndex in pieceList, make an entry in the pieceStatus
+       -- map with pieceIndex as the key and modify the value to add the peer.
+
+       -- download each of the piece in order
+     UnChokeMsg -> do
+       print msg
+       msgLoop (state {heChoking = False}) pieceStatus
+     _ -> print msg
 
 handlePeerMsgs :: Peer -> Metainfo -> String -> (String -> IO ()) -> IO ()
 handlePeerMsgs p m peerId logFn = do
@@ -225,5 +222,8 @@ handlePeerMsgs p m peerId logFn = do
                         , heChoking = True
                         , meInterested = True
                         , meChoking = False }
-  msgLoop state (pieces (info m))
+      pieceHash = (pieces (info m))
+      numPieces = (toInteger . (`quot` 20) . BC.length) pieceHash
+      pieceStatus = mkPieceMap numPieces pieceHash
+  msgLoop state pieceStatus