packages feed

salvia-0.0.4: src/Network/Salvia/Core/Main.hs

module Network.Salvia.Core.Main (start) where

import Control.Monad.State

import Network.Salvia.Core.Config (listenAddr, listenPort, backlog, HttpdConfig)
import Network.Salvia.Core.Handler (Handler, makeContext)
import Network.Salvia.Core.Network (server)

-------- HTTP deamon implementation -------------------------------------------

{-
Given a server configuration and a handler to invoke when receiving client
request the server starts and keep running forever.
-}

start :: HttpdConfig -> Handler () -> IO ()
start config httpHandler =
  server
    (listenAddr config)
    (listenPort config)
    (backlog config)
    tcpHandler
  where
    tcpHandler handle addr = 
      fst `liftM` runStateT httpHandler
        (makeContext config addr handle)