From 611d238930ad59ad8fdf0cad3cd48fec6e7163ae Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan Date: Thu, 23 Jul 2015 14:12:06 +0530 Subject: [PATCH] refactor PeerState: Add connection handle to be part of peerstate --- src/FuncTorrent/Peer.hs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/FuncTorrent/Peer.hs b/src/FuncTorrent/Peer.hs index 70e89d8..0d70f9f 100644 --- a/src/FuncTorrent/Peer.hs +++ b/src/FuncTorrent/Peer.hs @@ -28,7 +28,8 @@ type IP = String type Port = Integer -- PeerState is a misnomer -data PeerState = PeerState { peer :: Peer +data PeerState = PeerState { handle :: Handle + , peer :: Peer , meChoking :: Bool , meInterested :: Bool , heChoking :: Bool @@ -191,13 +192,15 @@ createDummyFile path size = -- loop1 :: shake hands with all peers, find out the pieces they have, form PieceData. -- recvMsg :: Peer -> Handle -> Msg -msgLoop :: Handle -> ByteString -> PeerState -> IO () -msgLoop h pieceHash state = +msgLoop :: PeerState -> ByteString -> IO () +msgLoop state pieceHash = let numPieces = (toInteger . (`quot` 20) . BC.length) pieceHash pieceStatus = mkPieceMap numPieces pieceHash in forever $ do - msg <- getMsg h + -- 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 @@ -209,17 +212,18 @@ msgLoop h pieceHash state = -- download each of the piece in order UnChokeMsg -> do print msg - msgLoop h pieceHash (state {heChoking = False}) + msgLoop (state {heChoking = False}) pieceHash _ -> print msg handlePeerMsgs :: Peer -> Metainfo -> String -> (String -> IO ()) -> IO () handlePeerMsgs p m peerId logFn = do h <- handShake p (infoHash m) peerId logFn "handShake" - let state = PeerState { peer = p + let state = PeerState { handle = h + , peer = p , heInterested = False , heChoking = True , meInterested = True , meChoking = False } - msgLoop h (pieces (info m)) state + msgLoop state (pieces (info m)) -- 2.37.2