gameServer/ClientIO.hs
branchserver_refactor
changeset 4579 4e61c2a42121
parent 4295 1f5604cd99be
child 4585 6e747aef012f
equal deleted inserted replaced
4577:2c43cd7d5ce6 4579:4e61c2a42121
    55     where 
    55     where 
    56         clientOff msg = mapM_ (writeChan chan) [ClientMessage (ci, ["QUIT", msg]), Remove ci]
    56         clientOff msg = mapM_ (writeChan chan) [ClientMessage (ci, ["QUIT", msg]), Remove ci]
    57 
    57 
    58 
    58 
    59 
    59 
    60 clientSendLoop :: Socket -> Chan [B.ByteString] -> ClientIndex -> IO ()
    60 clientSendLoop :: Socket -> ThreadId -> Chan [B.ByteString] -> ClientIndex -> IO ()
    61 clientSendLoop s chan ci = do
    61 clientSendLoop s tId chan ci = do
    62     answer <- readChan chan
    62     answer <- readChan chan
    63     Exception.handle
    63     Exception.handle
    64         (\(e :: Exception.IOException) -> when (not $ isQuit answer) $ sendQuit e) $ do
    64         (\(e :: Exception.IOException) -> when (not $ isQuit answer) $ sendQuit e) $ do
    65             sendAll s $ (B.unlines answer) `B.append` (B.singleton '\n')
    65             sendAll s $ (B.unlines answer) `B.append` (B.singleton '\n')
    66 
    66 
    67     if (isQuit answer) then
    67     if (isQuit answer) then
       
    68         do
       
    69         killThread tId
    68         Exception.handle (\(_ :: Exception.IOException) -> putStrLn "error on sClose") $ sClose s
    70         Exception.handle (\(_ :: Exception.IOException) -> putStrLn "error on sClose") $ sClose s
    69         else
    71         else
    70         clientSendLoop s chan ci
    72         clientSendLoop s tId chan ci
    71 
    73 
    72     where
    74     where
    73         --sendQuit e = writeChan coreChan $ ClientMessage (ci, ["QUIT", B.pack $ show e])
    75         --sendQuit e = writeChan coreChan $ ClientMessage (ci, ["QUIT", B.pack $ show e])
    74         sendQuit e = putStrLn $ show e
    76         sendQuit e = putStrLn $ show e
    75         isQuit ("BYE":xs) = True
    77         isQuit ("BYE":xs) = True