module Game.LambdaHack.Client
( exeFrontend
) where
import Game.LambdaHack.Atomic
import Game.LambdaHack.Client.LoopClient
import Game.LambdaHack.Client.ProtocolClient
import Game.LambdaHack.Client.State
import Game.LambdaHack.Client.UI
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.State
exeFrontend :: ( MonadAtomic m, MonadClientUI m
, MonadClientReadResponse ResponseUI m
, MonadClientWriteRequest RequestUI m
, MonadAtomic n
, MonadClientReadResponse ResponseAI n
, MonadClientWriteRequest RequestAI n )
=> (m () -> SessionUI -> State -> StateClient
-> chanServerUI
-> IO ())
-> (n () -> SessionUI -> State -> StateClient
-> chanServerAI
-> IO ())
-> KeyKind -> Kind.COps -> DebugModeCli
-> ((FactionId -> chanServerUI -> IO ())
-> (FactionId -> chanServerAI -> IO ())
-> IO ())
-> IO ()
exeFrontend executorUI executorAI copsClient cops sdebugCli exeServer =
srtFrontend (executorUI . loopUI)
(executorAI . loopAI)
copsClient cops sdebugCli exeServer