{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE CPP #-}
module Application
( makeApplication
, getApplicationDev
, makeFoundation
) where
import Import
import Data.Default (def)
import Yesod.Default.Config
import Yesod.Default.Main (defaultDevelApp)
#if MIN_VERSION_fast_logger(2,1,0)
import Network.Wai.Middleware.RequestLogger
( mkRequestLogger, outputFormat, OutputFormat (..), IPAddrSource (..), destination
)
import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
import System.Log.FastLogger (newStdoutLoggerSet, defaultBufSize)
import Network.Wai.Logger (clockDateCacher)
import Yesod.Core.Types (loggerSet, Logger (Logger))
#else
import Network.Wai.Middleware.RequestLogger
import System.Log.FastLogger (mkLogger)
import System.IO (stdout)
#endif
import System.FilePath ((</>))
-- Import all relevant handler modules here.
-- Don't forget to add new modules to your cabal file!
import Handler.Home
import Handler.Play
import Handler.Replay
import Handler.PlaceShips
import Handler.Rules
import Handler.About
import Handler.SaveGame
import Logic.GameExt
mkYesodDispatch "App" resourcesApp
makeApplication :: AppConfig DefaultEnv Extra -> IO Application
makeApplication conf = do
foundation <- makeFoundation conf
logWare <- mkRequestLogger def
{ outputFormat =
if development
then Detailed True
else Apache FromSocket
#if MIN_VERSION_fast_logger(2,1,0)
, destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
#else
, destination = Logger $ appLogger foundation
#endif
}
app <- toWaiAppPlain foundation
return $ logWare app
makeFoundation :: AppConfig DefaultEnv Extra -> IO App
makeFoundation conf = do
#if MIN_VERSION_fast_logger(2,1,0)
loggerSet' <- newStdoutLoggerSet defaultBufSize
(getter, _) <- clockDateCacher
let logger = Yesod.Core.Types.Logger loggerSet' getter
#else
logger <- mkLogger True stdout
#endif
s <- staticSite
key <- loadKey (extraDataDir (appExtra conf) </> "key.aes")
let foundation = App conf s logger key
return foundation
-- for yesod devel
getApplicationDev :: IO (Int, Application)
getApplicationDev =
defaultDevelApp loader makeApplication
where
loader = Yesod.Default.Config.loadConfig (configSettings Development)
{ csParseExtra = parseExtra }