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}) |