]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Httpd.hs
Many improvements: still in early development
[Lucu.git] / Network / HTTP / Lucu / Httpd.hs
index 70df37766c209bbd6c0e5cbde3bb115e46beecfe..8fc36ac3c50b24500a1f1f6f824c9bd866321863 100644 (file)
@@ -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