blob: d455ec65d244e743c2865e41dc5bdd625ea124c2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Network.BitTorrent.Exchange.Session
(
) where
import Control.Concurrent.STM
import Control.Exception
import Control.Lens
import Data.Function
import Data.IORef
import Data.Ord
import Data.Typeable
import Text.PrettyPrint
import Data.Torrent.Bitfield
import Data.Torrent.InfoHash
import Network.BitTorrent.Core
import Network.BitTorrent.Exchange.Message
import Network.BitTorrent.Exchange.Status
data ExchangeError
= InvalidPieceIx PieceIx
| InvalidBlock BlockIx
| CorruptedPiece PieceIx
data Session = Session
{ storage :: Storage
, bitfield :: Bitfield
, assembler :: Assembler
, peerId :: PeerId
}
type Exchange = StateT Session (ReaderT Connection IO)
--runExchange :: Exchange () -> [PeerAddr] -> IO ()
--runExchange exchange peers = do
-- forM_ peers $ \ peer -> do
-- forkIO $ runReaderT (runStateT exchange session )
awaitEvent :: Exchange Event
awaitEvent = undefined
yieldEvent :: Exchange Event
yieldEvent = undefined
|