module Control.Concurrent.Network.Process
(
initProcess
) where
import System.IO
import Control.Concurrent.Network.Master
import Control.Concurrent.Network.Slave
import System.Console.GetOpt
import System.Environment
import System.Exit
import System.Log.Logger
data Options = Options
{ optMaster :: Bool
, optChildNum :: Int
, optDbgLevel :: Priority
}
defaultOptions = Options
{ optMaster = False
, optChildNum = 1
, optDbgLevel = WARNING
}
options :: [ OptDescr (Options -> IO Options) ]
options =
[ Option "m" ["child-number"] (ReqArg
(\ n opt -> return opt {optMaster = True, optChildNum = read n}) "[INT]")
"Master process only: number of child processes."
, Option "d" ["debug-level"] (ReqArg
(\ lev opt -> return opt { optDbgLevel = read lev })
"[DEBUG|INFO|NOTICE|WARNING|ERROR|CRITICAL|ALERT|EMERGENCY]")
"Debug level"
, Option "h" ["help"]
(NoArg
(\_ -> do
prg <- getProgName
hPutStrLn stderr (usageInfo prg options)
exitWith ExitSuccess))
"Show help"
]
initProcess :: IO NCContext
initProcess = do
args <- getArgs
(acts, _, msgs) <- return $ getOpt RequireOrder options args
putStrLn $ concat msgs
opts <- foldl (>>=) (return defaultOptions) acts
logger <- getRootLogger
saveGlobalLogger $ setLevel (optDbgLevel opts) logger
if optMaster opts
then do
initMaster $ optChildNum opts
exitSuccess
else initSlave