X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FHttpd.hs;h=8fc36ac3c50b24500a1f1f6f824c9bd866321863;hp=70df37766c209bbd6c0e5cbde3bb115e46beecfe;hb=3c7a58ab749a55a30466a033b170536bcdf18b98;hpb=9961a721f98b101825ef154a2122c1fc2fa6d1ac diff --git a/Network/HTTP/Lucu/Httpd.hs b/Network/HTTP/Lucu/Httpd.hs index 70df377..8fc36ac 100644 --- a/Network/HTTP/Lucu/Httpd.hs +++ b/Network/HTTP/Lucu/Httpd.hs @@ -1,32 +1,22 @@ module Network.HTTP.Lucu.Httpd - ( ResourceTable - , mkResourceTable -- [ ([String], Resource ()) ] -> ResourceTable - , runHttpd -- Config -> ResourceTable -> IO () + ( 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 Data.Map as M -import Data.Map (Map) import Network import Network.HTTP.Lucu.Config -import Network.HTTP.Lucu.Parser -import Network.HTTP.Lucu.Request +import Network.HTTP.Lucu.Interaction +import Network.HTTP.Lucu.RequestReader import Network.HTTP.Lucu.Resource -import Network.HTTP.Lucu.Response +import Network.HTTP.Lucu.ResponseWriter import System.IO -type ResourceTable = Map [String] (Resource ()) - - -mkResourceTable :: [ ([String], Resource ()) ] -> ResourceTable -mkResourceTable = M.fromList - - -runHttpd :: Config -> ResourceTable -> IO () +runHttpd :: Config -> ResTree -> IO () runHttpd cnf table = withSocketsDo $ do so <- listenOn (cnfServerPort cnf) @@ -34,19 +24,8 @@ runHttpd cnf table where loop :: Socket -> IO () loop so - = do (h, host, port) <- accept so - forkIO $ service h host port + = do (h, host, _) <- accept so + tQueue <- newInteractionQueue + forkIO $ requestReader cnf table h host tQueue + forkIO $ responseWriter h tQueue loop so - - -service :: Handle -> HostName -> PortNumber -> IO () -service h host port - = do input <- B.hGetContents h - loop input - where - loop :: ByteString -> IO () - loop input = case parse requestP input of - Nothing - -> fail "FIXME" - Just (req, input') - -> print req