44 answerConnected = answerClientOnly ["CONNECTED", "Hedgewars server http://www.hedgewars.org/"] |
44 answerConnected = answerClientOnly ["CONNECTED", "Hedgewars server http://www.hedgewars.org/"] |
45 answerNotOwner = answerClientOnly ["ERROR", "You do not own this team"] |
45 answerNotOwner = answerClientOnly ["ERROR", "You do not own this team"] |
46 answerCannotCreateRoom = answerClientOnly ["WARNING", "Cannot create more rooms"] |
46 answerCannotCreateRoom = answerClientOnly ["WARNING", "Cannot create more rooms"] |
47 |
47 |
48 answerAbandoned = answerOthersRoom ["BYE", "Room abandoned"] |
48 answerAbandoned = answerOthersRoom ["BYE", "Room abandoned"] |
49 answerQuitInform nick = answerOthersRoom ["LEFT", nick] |
|
50 answerChatString nick msg = answerOthersRoom ["CHAT_STRING", nick, msg] |
49 answerChatString nick msg = answerOthersRoom ["CHAT_STRING", nick, msg] |
51 answerAddTeam team = answerOthersRoom $ teamToNet team |
50 answerAddTeam team = answerOthersRoom $ teamToNet team |
52 answerRemoveTeam teamName = answerOthersRoom ["REMOVE_TEAM", teamName] |
51 answerRemoveTeam teamName = answerOthersRoom ["REMOVE_TEAM", teamName] |
53 answerMap mapName = answerOthersRoom ["MAP", mapName] |
52 answerMap mapName = answerOthersRoom ["MAP", mapName] |
54 answerHHNum teamName hhNumber = answerOthersRoom ["HH_NUM", teamName, show hhNumber] |
53 answerHHNum teamName hhNumber = answerOthersRoom ["HH_NUM", teamName, show hhNumber] |
55 answerTeamColor teamName newColor = answerOthersRoom ["TEAM_COLOR", teamName, newColor] |
54 answerTeamColor teamName newColor = answerOthersRoom ["TEAM_COLOR", teamName, newColor] |
56 answerConfigParam paramName paramStrs = answerOthersRoom $ "CONFIG_PARAM" : paramName : paramStrs |
55 answerConfigParam paramName paramStrs = answerOthersRoom $ "CONFIG_PARAM" : paramName : paramStrs |
|
56 answerQuitInform nick msg = |
|
57 if not $ null msg then |
|
58 answerOthersRoom ["LEFT", nick, msg] |
|
59 else |
|
60 answerOthersRoom ["LEFT", nick] |
57 |
61 |
58 answerJoined nick = answerSameRoom ["JOINED", nick] |
62 answerJoined nick = answerSameRoom ["JOINED", nick] |
59 answerRunGame = answerSameRoom ["RUN_GAME"] |
63 answerRunGame = answerSameRoom ["RUN_GAME"] |
60 answerIsReady nick = answerSameRoom ["READY", nick] |
64 answerIsReady nick = answerSameRoom ["READY", nick] |
61 answerNotReady nick = answerSameRoom ["NOT_READY", nick] |
65 answerNotReady nick = answerSameRoom ["NOT_READY", nick] |
99 if null (room client) then |
103 if null (room client) then |
100 (noChangeClients, noChangeRooms, answerQuit msg) |
104 (noChangeClients, noChangeRooms, answerQuit msg) |
101 else if isMaster client then |
105 else if isMaster client then |
102 (noChangeClients, removeRoom (room client), (answerQuit msg) ++ answerAbandoned) -- core disconnects clients on ROOMABANDONED answer |
106 (noChangeClients, removeRoom (room client), (answerQuit msg) ++ answerAbandoned) -- core disconnects clients on ROOMABANDONED answer |
103 else |
107 else |
104 (noChangeClients, modifyRoom clRoom{teams = othersTeams, playersIn = (playersIn clRoom) - 1, readyPlayers = newReadyPlayers}, (answerQuit msg) ++ (answerQuitInform $ nick client) ++ answerRemoveClientTeams) |
108 (noChangeClients, modifyRoom clRoom{teams = othersTeams, playersIn = (playersIn clRoom) - 1, readyPlayers = newReadyPlayers}, (answerQuit msg) ++ (answerQuitInform (nick client) msg) ++ answerRemoveClientTeams) |
105 where |
109 where |
106 clRoom = roomByName (room client) rooms |
110 clRoom = roomByName (room client) rooms |
107 answerRemoveClientTeams = concatMap (\tn -> answerOthersRoom ["REMOVE_TEAM", teamname tn]) clientTeams |
111 answerRemoveClientTeams = concatMap (\tn -> answerOthersRoom ["REMOVE_TEAM", teamname tn]) clientTeams |
108 (clientTeams, othersTeams) = partition (\t -> teamowner t == nick client) $ teams clRoom |
112 (clientTeams, othersTeams) = partition (\t -> teamowner t == nick client) $ teams clRoom |
109 newReadyPlayers = if isReady client then (readyPlayers clRoom) - 1 else readyPlayers clRoom |
113 newReadyPlayers = if isReady client then (readyPlayers clRoom) - 1 else readyPlayers clRoom |
249 handleCmd_inRoom client _ rooms ["HH_NUM", teamName, numberStr] = |
253 handleCmd_inRoom client _ rooms ["HH_NUM", teamName, numberStr] = |
250 if not $ isMaster client then |
254 if not $ isMaster client then |
251 (noChangeClients, noChangeRooms, answerNotMaster) |
255 (noChangeClients, noChangeRooms, answerNotMaster) |
252 else |
256 else |
253 if hhNumber < 1 || hhNumber > 8 || noSuchTeam || hhNumber > (canAddNumber + (hhnum team)) then |
257 if hhNumber < 1 || hhNumber > 8 || noSuchTeam || hhNumber > (canAddNumber + (hhnum team)) then |
254 (noChangeClients, noChangeRooms, answerBadParam) |
258 (noChangeClients, noChangeRooms, []) |
255 else |
259 else |
256 (noChangeClients, modifyRoom $ modifyTeam clRoom team{hhnum = hhNumber}, answerHHNum teamName hhNumber) |
260 (noChangeClients, modifyRoom $ modifyTeam clRoom team{hhnum = hhNumber}, answerHHNum teamName hhNumber) |
257 where |
261 where |
258 hhNumber = fromMaybe 0 (maybeRead numberStr :: Maybe Int) |
262 hhNumber = fromMaybe 0 (maybeRead numberStr :: Maybe Int) |
259 noSuchTeam = isNothing findTeam |
263 noSuchTeam = isNothing findTeam |
265 handleCmd_inRoom client _ rooms ["TEAM_COLOR", teamName, newColor] = |
269 handleCmd_inRoom client _ rooms ["TEAM_COLOR", teamName, newColor] = |
266 if not $ isMaster client then |
270 if not $ isMaster client then |
267 (noChangeClients, noChangeRooms, answerNotMaster) |
271 (noChangeClients, noChangeRooms, answerNotMaster) |
268 else |
272 else |
269 if noSuchTeam then |
273 if noSuchTeam then |
270 (noChangeClients, noChangeRooms, answerBadParam) |
274 (noChangeClients, noChangeRooms, []) |
271 else |
275 else |
272 (noChangeClients, modifyRoom $ modifyTeam clRoom team{teamcolor = newColor}, answerTeamColor teamName newColor) |
276 (noChangeClients, modifyRoom $ modifyTeam clRoom team{teamcolor = newColor}, answerTeamColor teamName newColor) |
273 where |
277 where |
274 noSuchTeam = isNothing findTeam |
278 noSuchTeam = isNothing findTeam |
275 team = fromJust findTeam |
279 team = fromJust findTeam |
276 findTeam = find (\t -> teamName == teamname t) $ teams clRoom |
280 findTeam = find (\t -> teamName == teamname t) $ teams clRoom |
277 clRoom = roomByName (room client) rooms |
281 clRoom = roomByName (room client) rooms |
278 |
282 |
279 handleCmd_inRoom client _ rooms ["REMOVE_TEAM", teamName] = |
283 handleCmd_inRoom client _ rooms ["REMOVE_TEAM", teamName] = |
280 if noSuchTeam then |
284 if noSuchTeam then |
281 (noChangeClients, noChangeRooms, answerBadParam) |
285 (noChangeClients, noChangeRooms, []) |
282 else |
286 else |
283 if not $ nick client == teamowner team then |
287 if not $ nick client == teamowner team then |
284 (noChangeClients, noChangeRooms, answerNotOwner) |
288 (noChangeClients, noChangeRooms, answerNotOwner) |
285 else |
289 else |
286 (noChangeClients, modifyRoom clRoom{teams = filter (\t -> teamName /= teamname t) $ teams clRoom}, answerRemoveTeam teamName) |
290 (noChangeClients, modifyRoom clRoom{teams = filter (\t -> teamName /= teamname t) $ teams clRoom}, answerRemoveTeam teamName) |