equal
deleted
inserted
replaced
|
1 module Miscutils where |
|
2 |
|
3 import IO |
|
4 import System.IO |
|
5 import Control.Concurrent |
|
6 import Control.Concurrent.STM |
|
7 import Control.Exception (finally) |
|
8 |
|
9 sendMsg :: Handle -> String -> IO() |
|
10 sendMsg clientHandle str = finally (return ()) (hPutStrLn clientHandle str >> hFlush clientHandle) -- catch exception when client tries to send to other |
|
11 |
|
12 sendAll :: [Handle] -> String -> IO[()] |
|
13 sendAll clientsList str = mapM (\x -> sendMsg x str) clientsList |
|
14 |
|
15 sendOthers :: [Handle] -> Handle -> String -> IO[()] |
|
16 sendOthers clientsList clientHandle str = sendAll (filter (/= clientHandle) clientsList) str |
|
17 |
|
18 extractCmd :: String -> (String, [String]) |
|
19 extractCmd str = if ws == [] then ("", []) else (head ws, tail ws) |
|
20 where ws = words str |
|
21 |
|
22 manipState :: TVar[a] -> ([a] -> [a]) -> IO() |
|
23 manipState state op = |
|
24 atomically $ do |
|
25 ls <- readTVar state |
|
26 writeTVar state $ op ls |
|
27 |