gameServer/NetRoutines.hs
changeset 10912 5b8d8ecef5a8
parent 10460 8dcea9087d75
child 11046 47a8c19ecb60
equal deleted inserted replaced
10910:df11dea74701 10912:5b8d8ecef5a8
    27 import qualified Codec.Binary.Base64 as Base64
    27 import qualified Codec.Binary.Base64 as Base64
    28 import qualified Data.ByteString as BW
    28 import qualified Data.ByteString as BW
    29 import qualified Data.ByteString.Char8 as B
    29 import qualified Data.ByteString.Char8 as B
    30 import qualified Control.Exception as E
    30 import qualified Control.Exception as E
    31 import System.Entropy
    31 import System.Entropy
       
    32 import Data.Either
    32 -----------------------------
    33 -----------------------------
    33 import CoreTypes
    34 import CoreTypes
    34 import Utils
    35 import Utils
    35 
    36 
    36 
    37 
    37 acceptLoop :: Socket -> Chan CoreMessage -> IO ()
    38 acceptLoop :: Socket -> Chan CoreMessage -> IO ()
    38 acceptLoop servSock chan = E.bracket openHandle closeHandle f
    39 acceptLoop servSock chan = E.bracket openHandle closeHandle (forever . f)
    39     where
    40     where
    40     f ch = forever $
    41     f ch = E.try (Network.Socket.accept servSock) >>= \v -> case v of
    41         do
    42       Left (e :: E.IOException) -> return ()
    42         (sock, sockAddr) <- Network.Socket.accept servSock
    43       Right (sock, sockAddr) -> do
    43 
       
    44         clientHost <- sockAddr2String sockAddr
    44         clientHost <- sockAddr2String sockAddr
    45 
    45 
    46         currentTime <- getCurrentTime
    46         currentTime <- getCurrentTime
    47 
    47 
    48         sendChan' <- newChan
    48         sendChan' <- newChan