packages feed

conjure-0.1: src/Conjure/Network/Server.hs

module Conjure.Network.Server where

import Conjure.Types
import Conjure.Network.Peer   ( connectionFromPeer )
import Conjure.Debug

import Control.Concurrent
import Control.Concurrent.STM

import Data.Map (Map)
import Data.ByteString
import Network                ( PortID(..), PortNumber, listenOn, accept )

runServer :: TVar [ConnectedPeer]
          -> TVar (Map ByteString ActiveTorrent)
          -> PortNumber
          -> IO ()
runServer connectedPeers torrentMap port
    = do sock <- listenOn (PortNumber port)
         debug $ "Server is awaiting connections. Socket: " ++ show (sock, port)
         let loop = do (handle, _, _) <- accept sock
                       -- debug $ "(server) got connect from: " ++ show hostname ++ ":" ++ show port ++ " (handle: " ++ show handle ++ ")"
                       forkIO (connectionFromPeer connectedPeers torrentMap handle)
                       loop
         loop