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, mkContext) 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 (mkContext config addr handle)