1. Add IFDEFs for video recording
2. Options for video recording were hardcoded in engine,
now they are hardcoded in frontend and passed to engine thru command line
(later it will be possible to change them in frontend)
module ServerState
(
module RoomsAndClients,
clientRoomA,
ServerState(..),
client's,
allClientsS,
roomClientsS,
sameProtoClientsS,
io
) where
import Control.Monad.State.Strict
import Data.Set as Set(Set)
import Data.Word
----------------------
import RoomsAndClients
import CoreTypes
data ServerState = ServerState {
clientIndex :: !(Maybe ClientIndex),
serverInfo :: !ServerInfo,
removedClients :: !(Set.Set ClientIndex),
roomsClients :: !MRnC
}
clientRoomA :: StateT ServerState IO RoomIndex
clientRoomA = do
(Just ci) <- gets clientIndex
rnc <- gets roomsClients
io $ clientRoomM rnc ci
client's :: (ClientInfo -> a) -> StateT ServerState IO a
client's f = do
(Just ci) <- gets clientIndex
rnc <- gets roomsClients
io $ client'sM rnc f ci
allClientsS :: StateT ServerState IO [ClientInfo]
allClientsS = gets roomsClients >>= liftIO . clientsM
roomClientsS :: RoomIndex -> StateT ServerState IO [ClientInfo]
roomClientsS ri = do
rnc <- gets roomsClients
io $ roomClientsM rnc ri
sameProtoClientsS :: Word16 -> StateT ServerState IO [ClientInfo]
sameProtoClientsS p = liftM f allClientsS
where
f = filter (\c -> clientProto c == p)
io :: IO a -> StateT ServerState IO a
io = liftIO