diff -r 21dd1def5aaf -r 0eab727d4717 gameServer/ServerState.hs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gameServer/ServerState.hs Wed Feb 02 11:28:38 2011 +0300 @@ -0,0 +1,47 @@ +module ServerState + ( + module RoomsAndClients, + clientRoomA, + ServerState(..), + client's, + allClientsS, + roomClientsS, + io + ) 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 + 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 + +io :: IO a -> StateT ServerState IO a +io = liftIO