equal
deleted
inserted
replaced
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 $ |