-- | Abstract syntax of client commands.
-- See
-- <https://github.com/LambdaHack/LambdaHack/wiki/Client-server-architecture>.
module Game.LambdaHack.Common.Response
  ( Response(..), CliSerQueue, ChanServer(..)
  ) where

import Prelude ()

import Game.LambdaHack.Common.Prelude

import Control.Concurrent

import Game.LambdaHack.Atomic
import Game.LambdaHack.Common.Actor
import Game.LambdaHack.Common.Request

-- | Abstract syntax of client commands for both AI and UI clients.
data Response =
    RespUpdAtomic UpdAtomic
  | RespQueryAI ActorId
  | RespSfxAtomic SfxAtomic
  | RespQueryUI
  deriving Show

type CliSerQueue = MVar

-- | Connection channel between the server and a single client.
data ChanServer = ChanServer
  { responseS  :: CliSerQueue Response
  , requestAIS :: CliSerQueue RequestAI
  , requestUIS :: Maybe (CliSerQueue RequestUI)
  }