module Network.HTTP.Lucu.Httpd ( runHttpd -- Config -> ResTree -> IO () ) where import Control.Concurrent import Control.Concurrent.STM import qualified Data.ByteString.Lazy.Char8 as B import Data.ByteString.Lazy.Char8 (ByteString) import Network import Network.HTTP.Lucu.Config import Network.HTTP.Lucu.Interaction import Network.HTTP.Lucu.RequestReader import Network.HTTP.Lucu.Resource import Network.HTTP.Lucu.ResponseWriter import System.IO runHttpd :: Config -> ResTree -> IO () runHttpd cnf table = withSocketsDo $ do so <- listenOn (cnfServerPort cnf) loop so where loop :: Socket -> IO () loop so = do (h, host, _) <- accept so tQueue <- newInteractionQueue readerTID <- forkIO $ requestReader cnf table h host tQueue writerTID <- forkIO $ responseWriter h tQueue readerTID loop so