packages feed

Combinatorrent-0.2.0: src/Channels.hs

module Channels
    ( Peer(..)
    , PeerMessage(..)
    , PeerChannel
    , MgrMessage(..)
    , MgrChannel
    , BandwidthChannel
    , TrackerMsg(..)
    , TrackerChannel
    )
where

import Control.Concurrent
import Control.Concurrent.STM

import Network
import Torrent

data Peer = Peer { peerHost :: HostName,
                   peerPort :: PortID }

data PeerMessage = ChokePeer
                 | UnchokePeer
                 | PieceCompleted PieceNum
                 | CancelBlock PieceNum Block

type PeerChannel = TChan PeerMessage

---- TRACKER

-- | Messages to the tracker process
data TrackerMsg = Stop -- ^ Ask the Tracker to stop
                | TrackerTick Integer -- ^ Ticking in the tracker, used to contact again
                | Start               -- ^ Ask the tracker to Start
                | Complete            -- ^ Ask the tracker to Complete the torrent
type TrackerChannel = TChan TrackerMsg

data MgrMessage = Connect InfoHash ThreadId PeerChannel
                | Disconnect ThreadId

type MgrChannel = TChan MgrMessage

-- | A Channel type we use for transferring the amount of data we transferred
type BandwidthChannel = TChan Integer