gameServer/HandlerUtils.hs
branch0.9.14
changeset 4242 5e3c5fe2cb14
parent 4241 835fd7a0e1bf
child 4245 3084dc7b4624
equal deleted inserted replaced
4241:835fd7a0e1bf 4242:5e3c5fe2cb14
     1 module HandlerUtils where
       
     2 
       
     3 import Control.Monad.Reader
       
     4 import qualified Data.ByteString.Char8 as B
       
     5 
       
     6 import RoomsAndClients
       
     7 import CoreTypes
       
     8 import Actions
       
     9 
       
    10 thisClient :: Reader (ClientIndex, IRnC) ClientInfo
       
    11 thisClient = do
       
    12     (ci, rnc) <- ask
       
    13     return $ rnc `client` ci
       
    14 
       
    15 thisRoom :: Reader (ClientIndex, IRnC) RoomInfo
       
    16 thisRoom = do
       
    17     (ci, rnc) <- ask
       
    18     let ri = clientRoom rnc ci
       
    19     return $ rnc `room` ri
       
    20 
       
    21 clientNick :: Reader (ClientIndex, IRnC) B.ByteString
       
    22 clientNick = liftM nick thisClient
       
    23 
       
    24 roomOthersChans :: Reader (ClientIndex, IRnC) [ClientChan]
       
    25 roomOthersChans = do
       
    26     (ci, rnc) <- ask
       
    27     let ri = clientRoom rnc ci
       
    28     return $ map (sendChan . client rnc) $ filter (/= ci) (roomClients rnc ri)
       
    29 
       
    30 roomClientsChans :: Reader (ClientIndex, IRnC) [ClientChan]
       
    31 roomClientsChans = do
       
    32     (ci, rnc) <- ask
       
    33     let ri = clientRoom rnc ci
       
    34     return $ map (sendChan . client rnc) (roomClients rnc ri)
       
    35 
       
    36 thisClientChans :: Reader (ClientIndex, IRnC) [ClientChan]
       
    37 thisClientChans = do
       
    38     (ci, rnc) <- ask
       
    39     return $ [sendChan (rnc `client` ci)]
       
    40 
       
    41 answerClient :: [B.ByteString] -> Reader (ClientIndex, IRnC) [Action]
       
    42 answerClient msg = thisClientChans >>= return . (: []) . flip AnswerClients msg
       
    43 
       
    44 allRoomInfos :: Reader (a, IRnC) [RoomInfo]
       
    45 allRoomInfos = liftM ((\irnc -> map (room irnc) $ allRooms irnc) . snd) ask