equal
deleted
inserted
replaced
59 sendAnswers ((handlesFunc, answer):answers) client clients rooms = do |
59 sendAnswers ((handlesFunc, answer):answers) client clients rooms = do |
60 let recipients = handlesFunc client clients rooms |
60 let recipients = handlesFunc client clients rooms |
61 unless (null recipients) $ putStrLn ("< " ++ (show answer)) |
61 unless (null recipients) $ putStrLn ("< " ++ (show answer)) |
62 |
62 |
63 clHandles' <- forM recipients $ |
63 clHandles' <- forM recipients $ |
64 \ch -> Control.Exception.handle (\e -> putStrLn ("handle exception: " ++ show e) >> if head answer == "BYE" then return [ch] else return []) $ -- cannot just remove |
64 \ch -> Control.Exception.handle (\e -> putStrLn ("handle exception: " ++ show e) >> if head answer == "BYE" then return [ch] else atomically $ writeTChan (chan $ fromJust $ clientByHandle ch clients) ["QUIT"] >> return []) $ -- cannot just remove |
65 do |
65 do |
66 forM_ answer (\str -> hPutStrLn ch str) |
66 forM_ answer (\str -> hPutStrLn ch str) |
67 hPutStrLn ch "" |
67 hPutStrLn ch "" |
68 hFlush ch |
68 hFlush ch |
69 if head answer == "BYE" then hClose ch >> return [ch] else return [] |
69 if head answer == "BYE" then return [ch] else return [] |
70 |
70 |
71 let mclients = remove clients $ concat clHandles' |
71 let mclients = remove clients $ concat clHandles' |
72 |
72 |
73 sendAnswers answers client mclients rooms |
73 sendAnswers answers client mclients rooms |
74 where |
74 where |