netserver/Miscutils.hs
changeset 894 2ca76a7f3121
parent 890 1d8c4a5ec622
child 895 6aee2f335726
equal deleted inserted replaced
893:149244d86bf1 894:2ca76a7f3121
     3 import IO
     3 import IO
     4 import System.IO
     4 import System.IO
     5 import Control.Concurrent
     5 import Control.Concurrent
     6 import Control.Concurrent.STM
     6 import Control.Concurrent.STM
     7 import Control.Exception (finally)
     7 import Control.Exception (finally)
       
     8 import Data.Word
       
     9 import Data.Char
     8 
    10 
     9 data ClientInfo =
    11 data ClientInfo =
    10 	ClientInfo
    12 	ClientInfo
    11 	{
    13 	{
    12 		chan :: TChan String,
    14 		chan :: TChan String,
    13 		handle :: Handle,
    15 		handle :: Handle,
    14 		nick :: String,
    16 		nick :: String,
       
    17 		protocol :: Word16,
    15 		room :: String,
    18 		room :: String,
    16 		isMaster :: Bool
    19 		isMaster :: Bool
    17 	}
    20 	}
    18 
    21 
    19 data RoomInfo =
    22 data RoomInfo =
    54 			return res
    57 			return res
    55 
    58 
    56 tselect :: [ClientInfo] -> STM (String, ClientInfo)
    59 tselect :: [ClientInfo] -> STM (String, ClientInfo)
    57 tselect = foldl orElse retry . map (\ci -> (flip (,) ci) `fmap` readTChan (chan ci))
    60 tselect = foldl orElse retry . map (\ci -> (flip (,) ci) `fmap` readTChan (chan ci))
    58 
    61 
       
    62 maybeRead :: Read a => String -> Maybe a
       
    63 maybeRead s = case reads s of
       
    64 	[(x, rest)] | all isSpace rest -> Just x
       
    65 	_         -> Nothing
       
    66