]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/FuncTorrent/Tracker/Udp.hs
refactoring: return type of tracker
[functorrent.git] / src / FuncTorrent / Tracker / Udp.hs
index fe4d9e0aeb8dfcaab57ba46bb040eebfd720fa99..aaa99472b44c3a9d72f955afd0f35a5e8c05d534 100644 (file)
@@ -39,8 +39,8 @@ import Network.Socket.ByteString (sendTo, recvFrom)
 import System.Random (randomIO)
 import System.Timeout (timeout)
 
 import System.Random (randomIO)
 import System.Timeout (timeout)
 
-import FuncTorrent.Peer (Peer(..))
-import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..))
+import FuncTorrent.PeerMsgs (Peer(..))
+import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..), UdpTrackerResponse(..))
 import FuncTorrent.Utils (IP, Port, toIP, toPort, getHostname, getPort)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
 
 import FuncTorrent.Utils (IP, Port, toIP, toPort, getHostname, getPort)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
 
@@ -171,13 +171,7 @@ announceRequest cid infohash peerId up down left port = do
   liftIO $ sendRequest h (toStrict pkt)
   return tidi
 
   liftIO $ sendRequest h (toStrict pkt)
   return tidi
 
-data PeerStats = PeerStats { leechers :: Word32
-                           , seeders :: Word32
-                           , interval :: Word32
-                           , peers :: [Peer]
-                           } deriving (Show)
-
-announceResponse :: Word32 -> ReaderT UDPTrackerHandle IO PeerStats
+announceResponse :: Word32 -> ReaderT UDPTrackerHandle IO UdpTrackerResponse
 announceResponse tid = do
   h <- ask
   resp <- liftIO $ recvResponse h
 announceResponse tid = do
   h <- ask
   resp <- liftIO $ recvResponse h
@@ -186,10 +180,10 @@ announceResponse tid = do
       if tidr == tid
       then do
         liftIO $ putStrLn "announce succeeded"
       if tidr == tid
       then do
         liftIO $ putStrLn "announce succeeded"
-        return $ PeerStats ls ss interval xs
+        return $ UdpTrackerResponse ls ss interval xs
       else
       else
-        return $ PeerStats 0 0 0 []
-    _ -> return $ PeerStats 0 0 0 []
+        return $ UdpTrackerResponse 0 0 0 []
+    _ -> return $ UdpTrackerResponse 0 0 0 []
 
 getIPPortPairs :: Get [Peer]
 getIPPortPairs = do
 
 getIPPortPairs :: Get [Peer]
 getIPPortPairs = do
@@ -200,7 +194,7 @@ getIPPortPairs = do
     ip <- toIP <$> getByteString 4
     port <- toPort <$> getByteString 2
     ipportpairs <- getIPPortPairs
     ip <- toIP <$> getByteString 4
     port <- toPort <$> getByteString 2
     ipportpairs <- getIPPortPairs
-    return $ (Peer "" ip port) : ipportpairs
+    return $ (Peer ip port) : ipportpairs
 
 startSession :: String -> Port -> IO UDPTrackerHandle
 startSession host port = do
 
 startSession :: String -> Port -> IO UDPTrackerHandle
 startSession host port = do
@@ -216,7 +210,7 @@ closeSession (UDPTrackerHandle s _ _) = close s
 
 trackerLoop :: String -> Port -> String -> ByteString -> FS.MsgChannel -> TState -> IO ()
 trackerLoop url sport peerId infohash fschan tstate = forever $ do
 
 trackerLoop :: String -> Port -> String -> ByteString -> FS.MsgChannel -> TState -> IO ()
 trackerLoop url sport peerId infohash fschan tstate = forever $ do
-  st <- fmap readMVar $ FS.getStats fschan
+  st <- readMVar <$> FS.getStats fschan
   up <- fmap FS.bytesRead st
   down <- fmap FS.bytesWritten st
   handle <- startSession host port
   up <- fmap FS.bytesRead st
   down <- fmap FS.bytesWritten st
   handle <- startSession host port