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