netserver/Opts.hs
changeset 1492 2da1fe033f23
parent 1473 60e1fad78d58
child 1757 3aa7d21baca1
equal deleted inserted replaced
1491:0b1f44751509 1492:2da1fe033f23
     1 module Opts
     1 module Opts
     2 (
     2 (
     3 	GlobalOptions(..),
     3 	getOpts,
     4 	globalOptions
       
     5 ) where
     4 ) where
     6 
     5 
     7 import System
     6 import System
     8 import System.Console.GetOpt
     7 import System.Console.GetOpt
     9 import Network
     8 import Network
    10 import Data.Maybe ( fromMaybe )
     9 import Data.Maybe ( fromMaybe )
    11 import Miscutils
    10 import Miscutils
    12 import System.IO.Unsafe
    11 import System.IO.Unsafe
    13 
    12 
    14 data GlobalOptions =
       
    15 	GlobalOptions
       
    16 	{
       
    17 		isDedicated :: Bool,
       
    18 		serverMessage :: String,
       
    19 		listenPort :: PortNumber
       
    20 	}
       
    21 defaultMessage = "<h2><p align=center><a href=\"http://www.hedgewars.org/\">http://www.hedgewars.org/</a></p></h2>"
       
    22 defaultOptions = (GlobalOptions True defaultMessage 46631)
       
    23 
    13 
    24 options :: [OptDescr (GlobalOptions -> GlobalOptions)]
    14 options :: [OptDescr (ServerInfo -> ServerInfo)]
    25 options = [
    15 options = [
    26 	Option ['p'] ["port"] (ReqArg readListenPort "PORT") "listen on PORT",
    16 	Option ['p'] ["port"] (ReqArg readListenPort "PORT") "listen on PORT",
    27 	Option ['d'] ["dedicated"] (ReqArg readDedicated "BOOL") "start as dedicated (True or False)"
    17 	Option ['d'] ["dedicated"] (ReqArg readDedicated "BOOL") "start as dedicated (True or False)"
    28 	]
    18 	]
    29 
    19 
    30 readListenPort, readDedicated :: String -> GlobalOptions -> GlobalOptions
    20 readListenPort, readDedicated :: String -> ServerInfo -> ServerInfo
    31 readListenPort str opts = opts{listenPort = readPort}
    21 readListenPort str opts = opts{listenPort = readPort}
    32 	where
    22 	where
    33 		readPort = fromInteger $ fromMaybe 46631 (maybeRead str :: Maybe Integer)
    23 		readPort = fromInteger $ fromMaybe 46631 (maybeRead str :: Maybe Integer)
    34 
    24 
    35 readDedicated str opts = opts{isDedicated = readDedicated}
    25 readDedicated str opts = opts{isDedicated = readDedicated}
    36 	where
    26 	where
    37 		readDedicated = fromMaybe True (maybeRead str :: Maybe Bool)
    27 		readDedicated = fromMaybe True (maybeRead str :: Maybe Bool)
    38 
    28 
    39 opts :: IO GlobalOptions
    29 getOpts :: ServerInfo -> IO ServerInfo
    40 opts = do
    30 getOpts opts = do
    41 	args <- getArgs
    31 	args <- getArgs
    42 	case getOpt Permute options args of
    32 	case getOpt Permute options args of
    43 		(o, [], []) -> return $ foldr ($) defaultOptions o
    33 		(o, [], []) -> return $ foldr ($) opts o
    44 		(_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))
    34 		(_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))
    45 	where header = "Usage: newhwserv [OPTION...]"
    35 	where header = "Usage: newhwserv [OPTION...]"
    46 
       
    47 {-# NOINLINE globalOptions #-}
       
    48 globalOptions = unsafePerformIO opts