]> git.rkrishnan.org Git - functorrent.git/blob - src/Main.hs
refactoring
[functorrent.git] / src / Main.hs
1 module Main where
2
3 import System.Environment (getArgs)
4 import qualified Data.ByteString.Char8 as BC
5 import qualified Bencode as Benc
6 import qualified Metainfo as MInfo
7 import qualified Tracker as T
8 import qualified Text.ParserCombinators.Parsec as Parsec
9 import Data.Functor
10
11 printError :: Parsec.ParseError -> IO ()
12 printError e = putStrLn $ "parse error: " ++ show e
13
14 genPeerId :: String
15 genPeerId = "-HS0001-20150215"
16
17 main :: IO ()
18 main = do
19   args <- getArgs
20   torrentStr <- BC.readFile (head args)
21   case (Benc.decode torrentStr) of
22    Right d -> case (MInfo.mkMetaInfo d) of
23                Nothing -> putStrLn "parse error"
24                Just m -> do
25                  body <- (Benc.decode . BC.pack) <$> T.connect (MInfo.announce m) (T.prepareRequest d genPeerId)
26                  putStrLn (show body)
27    Left e -> printError e
28   putStrLn "done"