netserver/hedgewars-server.hs
changeset 1598 c853e02ed663
parent 1558 3370b7ffeb5c
child 1686 f42dbc52225c
equal deleted inserted replaced
1597:24f2f9fa0160 1598:c853e02ed663
    49 	cChan <- atomically newTChan
    49 	cChan <- atomically newTChan
    50 	sendChan <- atomically newTChan
    50 	sendChan <- atomically newTChan
    51 	forkIO $ clientRecvLoop cHandle cChan
    51 	forkIO $ clientRecvLoop cHandle cChan
    52 	forkIO $ clientSendLoop cHandle cChan sendChan
    52 	forkIO $ clientSendLoop cHandle cChan sendChan
    53 	
    53 	
    54 	atomically $ writeTChan acceptChan (ClientInfo cChan sendChan cHandle host currentTime "" 0 "" False False False)
    54 	atomically $ writeTChan acceptChan
       
    55 			(ClientInfo
       
    56 				cChan
       
    57 				sendChan
       
    58 				cHandle
       
    59 				host
       
    60 				currentTime
       
    61 				""
       
    62 				0
       
    63 				""
       
    64 				False
       
    65 				False
       
    66 				False
       
    67 				False)
       
    68 
    55 	atomically $ writeTChan cChan ["ASKME"]
    69 	atomically $ writeTChan cChan ["ASKME"]
    56 	acceptLoop servSock acceptChan
    70 	acceptLoop servSock acceptChan
    57 
    71 
    58 
    72 
    59 listenLoop :: Handle -> [String] -> TChan [String] -> IO ()
    73 listenLoop :: Handle -> [String] -> TChan [String] -> IO ()
   121 	let mclient = fromMaybe client $ find (== client) mclients
   135 	let mclient = fromMaybe client $ find (== client) mclients
   122 	let answers = map (\x -> x serverInfo) answerFuncs
   136 	let answers = map (\x -> x serverInfo) answerFuncs
   123 
   137 
   124 	clientsIn <- sendAnswers answers mclient mclients mrooms
   138 	clientsIn <- sendAnswers answers mclient mclients mrooms
   125 	mapM_ (\cl -> atomically $ writeTChan (chan cl) ["QUIT", "Kicked"]) $ filter forceQuit $ clientsIn
   139 	mapM_ (\cl -> atomically $ writeTChan (chan cl) ["QUIT", "Kicked"]) $ filter forceQuit $ clientsIn
   126 	
   140 
   127 	return (clientsIn, mrooms)
   141 	let clientsFinal = map (\cl -> if partRoom cl then cl{room = [], partRoom = False} else cl) clientsIn
       
   142 	return (clientsFinal, mrooms)
   128 
   143 
   129 
   144 
   130 mainLoop :: ServerInfo -> TChan ClientInfo -> TChan [String] -> [ClientInfo] -> [RoomInfo] -> IO ()
   145 mainLoop :: ServerInfo -> TChan ClientInfo -> TChan [String] -> [ClientInfo] -> [RoomInfo] -> IO ()
   131 mainLoop serverInfo acceptChan messagesChan clients rooms = do
   146 mainLoop serverInfo acceptChan messagesChan clients rooms = do
   132 	r <- atomically $
   147 	r <- atomically $