packages feed

happstack-helpers-0.11: HAppS/Server/Helpers.hs

module HAppS.Server.Helpers
    ( smartserver
    ) where

import HAppS.Server
import HAppS.State
import System.Environment
import Control.Concurrent
import System.Time
import HAppS.Server.CookieFixer

-- run the happs server on some port
-- include cookie fix, various other enhancements that make things simpler
smartserver :: (Methods st, Component st, ToMessage a) =>
               Conf -> String -> [ServerPartT IO a] -> Proxy st -> IO ()
smartserver conf progName c stateProxy = withProgName progName $ do
      putStrLn . ( "starting happs server" ++ ) =<< time
      control <- startSystemState stateProxy -- start the HAppS state system

      putStrLn . ( "happs state started" ++ ) =<< time

      tid <- forkIO $ simpleHTTP conf ( map cookieFixer c)
      putStrLn . ( ( "simpleHttp started on port " ++ (show . port $ conf) ++ "\n" ++
                 "shut down with ctrl-c" ) ++) =<< time

      waitForTermination
      killThread tid
      putStrLn . ( "creating checkpoint: " ++ ) =<< time
      createCheckpoint control

      putStrLn .  ( "shutting down system: " ++ ) =<< time
      shutdownSystem control 
      putStrLn .  ( "exiting: " ++ ) =<< time
         where time = return . ("\ntime: " ++ ) . show  =<< getClockTime