]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Httpd.hs
data/mime.types
[Lucu.git] / Network / HTTP / Lucu / Httpd.hs
index 70df37766c209bbd6c0e5cbde3bb115e46beecfe..2be87368b4b436d2d16c8e0c43b044b69ecdda67 100644 (file)
@@ -1,32 +1,23 @@
 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.Resource.Tree
+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 +25,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
+               readerTID    <- forkIO $ requestReader cnf table h host tQueue
+               writerTID    <- forkIO $ responseWriter cnf h tQueue readerTID
                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