gameServer/ServerState.hs
author nemo
Mon, 08 Nov 2010 22:26:44 -0500
changeset 4225 ce9e2b05e9c1
parent 3807 7e4f7ed41790
child 4601 08ae94dd4c0d
permissions -rw-r--r--
Revert yet again for breaking stuff. No more chances on this. If there'd been a release, this would have been twice with serious breakage. P.S. - as per koda's complaint last time, only reverted the non-iphone, probably means iphone is now broken. Oh well.

module ServerState
    (
    module RoomsAndClients,
    clientRoomA,
    ServerState(..),
    client's,
    allClientsS,
    roomClientsS
    ) where

import Control.Monad.State.Strict
import Data.Set as Set
----------------------
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
    liftIO $ clientRoomM rnc ci

client's :: (ClientInfo -> a) -> StateT ServerState IO a
client's f = do
    (Just ci) <- gets clientIndex
    rnc <- gets roomsClients
    liftIO $ 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
    liftIO $ roomClientsM rnc ri