gameServer/Actions.hs
changeset 11463 fe46826de291
parent 11341 e6e748d021d0
child 11465 0ae2e4c13bd1
equal deleted inserted replaced
11461:5dbc0f976b4a 11463:fe46826de291
   506 
   506 
   507 processAction JoinLobby = do
   507 processAction JoinLobby = do
   508     chan <- client's sendChan
   508     chan <- client's sendChan
   509     rnc <- gets roomsClients
   509     rnc <- gets roomsClients
   510     clientNick <- client's nick
   510     clientNick <- client's nick
       
   511     clProto <- client's clientProto
   511     isAuthenticated <- liftM (not . B.null) $ client's webPassword
   512     isAuthenticated <- liftM (not . B.null) $ client's webPassword
   512     isAdmin <- client's isAdministrator
   513     isAdmin <- client's isAdministrator
   513     isContr <- client's isContributor
   514     isContr <- client's isContributor
   514     loggedInClients <- liftM (Prelude.filter isVisible) $! allClientsS
   515     loggedInClients <- liftM (Prelude.filter isVisible) $! allClientsS
   515     let (lobbyNicks, clientsChans) = unzip . L.map (nick &&& sendChan) $ loggedInClients
   516     let (lobbyNicks, clientsChans) = unzip . L.map (nick &&& sendChan) $ loggedInClients
   519     inRoomNicks <- io $
   520     inRoomNicks <- io $
   520         allClientsM rnc
   521         allClientsM rnc
   521         >>= filterM (liftM ((/=) lobbyId) . clientRoomM rnc)
   522         >>= filterM (liftM ((/=) lobbyId) . clientRoomM rnc)
   522         >>= mapM (client'sM rnc nick)
   523         >>= mapM (client'sM rnc nick)
   523     let clFlags = B.concat . L.concat $ [["u" | isAuthenticated], ["a" | isAdmin], ["c" | isContr]]
   524     let clFlags = B.concat . L.concat $ [["u" | isAuthenticated], ["a" | isAdmin], ["c" | isContr]]
       
   525 
       
   526     roomsInfoList <- io $ do
       
   527         rooms <- roomsM rnc
       
   528         mapM (\r -> (if isNothing $ masterID r then return "" else client'sM rnc nick (fromJust $ masterID r))
       
   529             >>= \cn -> return $ roomInfo clProto cn r)
       
   530             $ filter (\r -> (roomProto r == clProto)) rooms
       
   531 
   524     mapM_ processAction . concat $ [
   532     mapM_ processAction . concat $ [
   525         [AnswerClients clientsChans ["LOBBY:JOINED", clientNick]]
   533         [AnswerClients clientsChans ["LOBBY:JOINED", clientNick]]
   526         , [AnswerClients [chan] ("LOBBY:JOINED" : clientNick : lobbyNicks)]
   534         , [AnswerClients [chan] ("LOBBY:JOINED" : clientNick : lobbyNicks)]
   527         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+u" : authenticatedNicks) | not $ null authenticatedNicks]
   535         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+u" : authenticatedNicks) | not $ null authenticatedNicks]
   528         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+a" : adminsNicks) | not $ null adminsNicks]
   536         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+a" : adminsNicks) | not $ null adminsNicks]
   529         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+c" : contrNicks) | not $ null contrNicks]
   537         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+c" : contrNicks) | not $ null contrNicks]
   530         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+i" : inRoomNicks) | not $ null inRoomNicks]
   538         , [AnswerClients [chan] ("CLIENT_FLAGS" : "+i" : inRoomNicks) | not $ null inRoomNicks]
   531         , [AnswerClients (chan : clientsChans) ["CLIENT_FLAGS",  B.concat["+" , clFlags], clientNick] | not $ B.null clFlags]
   539         , [AnswerClients (chan : clientsChans) ["CLIENT_FLAGS",  B.concat["+" , clFlags], clientNick] | not $ B.null clFlags]
   532         , [ModifyClient (\cl -> cl{logonPassed = True, isVisible = True})]
   540         , [ModifyClient (\cl -> cl{logonPassed = True, isVisible = True})]
   533         , [SendServerMessage]
   541         , [SendServerMessage]
       
   542         , [AnswerClients [chan] ("ROOMS" : concat roomsInfoList)]
   534         ]
   543         ]
   535 
   544 
   536 
   545 
   537 processAction (KickClient kickId) = do
   546 processAction (KickClient kickId) = do
   538     modify (\s -> s{clientIndex = Just kickId})
   547     modify (\s -> s{clientIndex = Just kickId})