author | nemo |
Thu, 16 Dec 2010 14:34:11 -0500 | |
changeset 4544 | d999e3221e3d |
parent 3568 | ae89cf0735dc |
child 4614 | 26661bf28dd5 |
permissions | -rw-r--r-- |
module HandlerUtils where import Control.Monad.Reader import qualified Data.ByteString.Char8 as B import RoomsAndClients import CoreTypes import Actions thisClient :: Reader (ClientIndex, IRnC) ClientInfo thisClient = do (ci, rnc) <- ask return $ rnc `client` ci thisRoom :: Reader (ClientIndex, IRnC) RoomInfo thisRoom = do (ci, rnc) <- ask let ri = clientRoom rnc ci return $ rnc `room` ri clientNick :: Reader (ClientIndex, IRnC) B.ByteString clientNick = liftM nick thisClient roomOthersChans :: Reader (ClientIndex, IRnC) [ClientChan] roomOthersChans = do (ci, rnc) <- ask let ri = clientRoom rnc ci return $ map (sendChan . client rnc) $ filter (/= ci) (roomClients rnc ri) roomClientsChans :: Reader (ClientIndex, IRnC) [ClientChan] roomClientsChans = do (ci, rnc) <- ask let ri = clientRoom rnc ci return $ map (sendChan . client rnc) (roomClients rnc ri) thisClientChans :: Reader (ClientIndex, IRnC) [ClientChan] thisClientChans = do (ci, rnc) <- ask return $ [sendChan (rnc `client` ci)] answerClient :: [B.ByteString] -> Reader (ClientIndex, IRnC) [Action] answerClient msg = thisClientChans >>= return . (: []) . flip AnswerClients msg allRoomInfos :: Reader (a, IRnC) [RoomInfo] allRoomInfos = liftM ((\irnc -> map (room irnc) $ allRooms irnc) . snd) ask