netserver/HWProto.hs
changeset 1512 43742041c211
parent 1493 1e422bc5d863
child 1558 3370b7ffeb5c
equal deleted inserted replaced
1511:a5bafdafb394 1512:43742041c211
    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)