189 else if roomPassword /= password clRoom then |
189 else if roomPassword /= password clRoom then |
190 (noChangeClients, noChangeRooms, answerWrongPassword) |
190 (noChangeClients, noChangeRooms, answerWrongPassword) |
191 else if isRestrictedJoins clRoom then |
191 else if isRestrictedJoins clRoom then |
192 (noChangeClients, noChangeRooms, answerRestricted) |
192 (noChangeClients, noChangeRooms, answerRestricted) |
193 else |
193 else |
194 (modifyClient client{room = roomName}, modifyRoom clRoom{playersIn = 1 + playersIn clRoom}, answerNicks ++ answerReady ++ (answerJoined $ nick client) ++ (answerNotReady $ nick client) ++ answerFullConfig clRoom ++ answerAllTeams clRoom) |
194 (modifyClient client{room = roomName}, modifyRoom clRoom{playersIn = 1 + playersIn clRoom}, answerNicks ++ answerReady ++ (answerJoined $ nick client) ++ (answerNotReady $ nick client) ++ answerFullConfig clRoom ++ answerAllTeams clRoom ++ watchRound) |
195 where |
195 where |
196 noSuchRoom = isNothing $ find (\room -> roomName == name room && roomProto room == protocol client) rooms |
196 noSuchRoom = isNothing $ find (\room -> roomName == name room && roomProto room == protocol client) rooms |
197 answerNicks = answerClientOnly $ ["JOINED"] ++ (map nick $ sameRoomClients) |
197 answerNicks = answerClientOnly $ ["JOINED"] ++ (map nick $ sameRoomClients) |
198 answerReady = concatMap (\c -> answerClientOnly [if isReady c then "READY" else "NOT_READY", nick c]) sameRoomClients |
198 answerReady = concatMap (\c -> answerClientOnly [if isReady c then "READY" else "NOT_READY", nick c]) sameRoomClients |
199 sameRoomClients = filter (\ci -> room ci == roomName) clients |
199 sameRoomClients = filter (\ci -> room ci == roomName) clients |
200 clRoom = roomByName roomName rooms |
200 clRoom = roomByName roomName rooms |
|
201 watchRound = if (roomProto clRoom < 20) || (not $ gameinprogress clRoom) then |
|
202 [] |
|
203 else |
|
204 answerRunGame ++ answerClientOnly ("GAMEMSG" : roundMsgs clRoom) |
201 |
205 |
202 handleCmd_noRoom client clients rooms ["JOIN", roomName] = |
206 handleCmd_noRoom client clients rooms ["JOIN", roomName] = |
203 handleCmd_noRoom client clients rooms ["JOIN", roomName, ""] |
207 handleCmd_noRoom client clients rooms ["JOIN", roomName, ""] |
204 |
208 |
205 handleCmd_noRoom _ _ _ _ = (noChangeClients, noChangeRooms, answerBadCmd) |
209 handleCmd_noRoom _ _ _ _ = (noChangeClients, noChangeRooms, answerBadCmd) |
341 where |
345 where |
342 clRoom = roomByName (room client) rooms |
346 clRoom = roomByName (room client) rooms |
343 sameRoomClients = filter (\ci -> room ci == name clRoom) clients |
347 sameRoomClients = filter (\ci -> room ci == name clRoom) clients |
344 answerAllNotReady = concatMap (\cl -> answerSameRoom ["NOT_READY", nick cl]) sameRoomClients |
348 answerAllNotReady = concatMap (\cl -> answerSameRoom ["NOT_READY", nick cl]) sameRoomClients |
345 |
349 |
346 handleCmd_inRoom client _ _ ["GAMEMSG", msg] = |
350 handleCmd_inRoom client _ rooms ["GAMEMSG", msg] = |
347 (noChangeClients, noChangeRooms, answerOthersRoom ["GAMEMSG", msg]) |
351 (noChangeClients, addMsg, answerOthersRoom ["GAMEMSG", msg]) |
|
352 where |
|
353 addMsg = if roomProto clRoom < 20 then |
|
354 noChangeRooms |
|
355 else |
|
356 modifyRoom clRoom{roundMsgs = roundMsgs clRoom ++ [msg]} |
|
357 clRoom = roomByName (room client) rooms |
348 |
358 |
349 handleCmd_inRoom client clients rooms ["KICK", kickNick] = |
359 handleCmd_inRoom client clients rooms ["KICK", kickNick] = |
350 if isMaster client then |
360 if isMaster client then |
351 if noSuchClient || (kickClient == client) then |
361 if noSuchClient || (kickClient == client) then |
352 (noChangeClients, noChangeRooms, []) |
362 (noChangeClients, noChangeRooms, []) |