module Game.LambdaHack.Server
( mainSer
) where
import Control.Concurrent
import qualified Control.Exception as Ex hiding (handle)
import Game.LambdaHack.Atomic
import Game.LambdaHack.Common.ClientOptions
import Game.LambdaHack.Common.Faction
import qualified Game.LambdaHack.Common.Kind as Kind
import Game.LambdaHack.Common.Request
import Game.LambdaHack.Common.Response
import Game.LambdaHack.Common.Thread
import Game.LambdaHack.Server.Commandline
import Game.LambdaHack.Server.LoopServer
import Game.LambdaHack.Server.MonadServer
import Game.LambdaHack.Server.ProtocolServer
import Game.LambdaHack.Server.State
mainSer :: (MonadAtomic m, MonadServerReadRequest m)
=> [String]
-> Kind.COps
-> (m () -> IO ())
-> (Kind.COps -> DebugModeCli
-> ((FactionId -> ChanServer ResponseUI RequestUI
-> IO ())
-> (FactionId -> ChanServer ResponseAI RequestAI
-> IO ())
-> IO ())
-> IO ())
-> IO ()
mainSer args
!copsSlow
exeSer
exeFront = do
sdebugNxt <- debugArgs args
let cops = speedupCOps False copsSlow
exeServer executorUI executorAI = do
Ex.finally
(exeSer (loopSer sdebugNxt executorUI executorAI cops))
(threadDelay 100000)
waitForChildren childrenServer
exeFront cops (sdebugCli sdebugNxt) exeServer