+ (ConnectResp tidr cid) ->
+ if tidr == tid
+ then do
+ liftIO $ putStrLn "connect succeeded"
+ return cid
+ else
+ return 0
+ _ -> return 0
+
+announceRequest :: Word64 -> ByteString -> Word64 -> Word64 -> Word64 -> Word16 -> ReaderT UDPTrackerHandle IO Word32
+announceRequest cid infohash up down left port = do
+ h <- ask
+ tidi <- liftIO randomIO
+ -- connId transId infohash peerId down left up event port)
+ let pkt = encode $ AnnounceReq cid tidi infohash "foo" down left up None port
+ liftIO $ sendRequest h (toStrict pkt)
+ return tidi
+
+data PeerStats = PeerStats { leechers :: Word32
+ , seeders :: Word32
+ , peers :: [(IP, Port)]
+ } deriving (Show)
+
+announceResponse :: Word32 -> ReaderT UDPTrackerHandle IO PeerStats
+announceResponse tid = do
+ h <- ask
+ resp <- liftIO $ recvResponse h
+ case resp of
+ (AnnounceResp tidr interval ss ls xs) ->
+ if tidr == tid
+ then do
+ liftIO $ putStrLn "announce succeeded"
+ return $ PeerStats ls ss xs
+ else
+ return $ PeerStats 0 0 []
+ _ -> return $ PeerStats 0 0 []