Skip to content

Commit

Permalink
introduce AddStartRect- & RemoveStartRect-CommandProcessor
Browse files Browse the repository at this point in the history
  • Loading branch information
hoijui committed Jan 22, 2011
1 parent dfee39a commit ba04ac5
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 93 deletions.
93 changes: 0 additions & 93 deletions src/main/java/com/springrts/tasserver/TASServer.java
Expand Up @@ -533,99 +533,6 @@ public boolean tryToExecCommand(String command, Client client) {
target.sendLine("FORCEQUITBATTLE");
// force client to leave battle:
tryToExecCommand("LEAVEBATTLE", target);
} else if (commands[0].equals("ADDSTARTRECT")) {
if (commands.length != 6) {
return false;
}
if (client.getAccount().getAccess().compareTo(Account.Access.NORMAL) < 0) {
return false;
}

if (client.getBattleID() == Battle.NO_BATTLE_ID) {
return false;
}

Battle bat = context.getBattles().getBattleByID(client.getBattleID());
context.getBattles().verify(bat);

if (bat.getFounder() != client) {
return false;
}

int allyno, left, top, right, bottom;
try {
allyno = Integer.parseInt(commands[1]);
left = Integer.parseInt(commands[2]);
top = Integer.parseInt(commands[3]);
right = Integer.parseInt(commands[4]);
bottom = Integer.parseInt(commands[5]);
} catch (NumberFormatException e) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(commands[0]).append(" command). You will now be disconnected ...").toString());
context.getClients().killClient(client, "Quit: inconsistent data");
return false;
}

StartRect startRect = bat.getStartRects().get(allyno);
if (startRect.isEnabled()) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(commands[0]).append(" command). You will now be disconnected ...").toString());
context.getClients().killClient(client, "Quit: inconsistent data");
return false;
}

startRect.setEnabled(true);
startRect.setLeft(left);
startRect.setTop(top);
startRect.setRight(right);
startRect.setBottom(bottom);

bat.sendToAllExceptFounder(new StringBuilder("ADDSTARTRECT ")
.append(allyno).append(" ")
.append(left).append(" ")
.append(top).append(" ")
.append(right).append(" ")
.append(bottom).toString());
} else if (commands[0].equals("REMOVESTARTRECT")) {
if (commands.length != 2) {
return false;
}
if (client.getAccount().getAccess().compareTo(Account.Access.NORMAL) < 0) {
return false;
}

if (client.getBattleID() == Battle.NO_BATTLE_ID) {
return false;
}

Battle bat = context.getBattles().getBattleByID(client.getBattleID());
context.getBattles().verify(bat);

if (bat.getFounder() != client) {
return false;
}

int allyno;
try {
allyno = Integer.parseInt(commands[1]);
} catch (NumberFormatException e) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(commands[0]).append(" command). You will now be disconnected ...").toString());
context.getClients().killClient(client, "Quit: inconsistent data");
return false;
}

StartRect startRect = bat.getStartRects().get(allyno);
if (!startRect.isEnabled()) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(commands[0]).append(" command). You will now be disconnected ...").toString());
context.getClients().killClient(client, "Quit: inconsistent data");
return false;
}

startRect.setEnabled(false);

bat.sendToAllExceptFounder(new StringBuilder("REMOVESTARTRECT ").append(allyno).toString());
} else if (commands[0].equals("SCRIPTSTART")) {
if (commands.length != 1) {
return false;
Expand Down
Expand Up @@ -22,6 +22,7 @@
import com.springrts.tasserver.ContextReceiver;
import com.springrts.tasserver.commands.impl.AddBotCommandProcessor;
import com.springrts.tasserver.commands.impl.AddNotificationCommandProcessor;
import com.springrts.tasserver.commands.impl.AddStartRectCommandProcessor;
import com.springrts.tasserver.commands.impl.AdminBroadcastCommandProcessor;
import com.springrts.tasserver.commands.impl.BroadcastCommandProcessor;
import com.springrts.tasserver.commands.impl.BroadcastExtendedCommandProcessor;
Expand Down Expand Up @@ -88,6 +89,7 @@
import com.springrts.tasserver.commands.impl.RegisterCommandProcessor;
import com.springrts.tasserver.commands.impl.RemoveAccountCommandProcessor;
import com.springrts.tasserver.commands.impl.RemoveBotCommandProcessor;
import com.springrts.tasserver.commands.impl.RemoveStartRectCommandProcessor;
import com.springrts.tasserver.commands.impl.RenameAccountCommandProcessor;
import com.springrts.tasserver.commands.impl.RingCommandProcessor;
import com.springrts.tasserver.commands.impl.SaveAccountsServerCommandProcessor;
Expand Down Expand Up @@ -264,6 +266,8 @@ public void init() {
commandProcessorClasses.add(EnableUnitsCommandProcessor.class);
commandProcessorClasses.add(EnableAllUnitsCommandProcessor.class);
commandProcessorClasses.add(RingCommandProcessor.class);
commandProcessorClasses.add(AddStartRectCommandProcessor.class);
commandProcessorClasses.add(RemoveStartRectCommandProcessor.class);

try {
load(commandProcessorClasses);
Expand Down
@@ -0,0 +1,101 @@
/*
Copyright (c) 2010 Robin Vobruba <robin.vobruba@derisk.ch>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package com.springrts.tasserver.commands.impl;


import com.springrts.tasserver.Account;
import com.springrts.tasserver.Battle;
import com.springrts.tasserver.Client;
import com.springrts.tasserver.StartRect;
import com.springrts.tasserver.commands.AbstractCommandProcessor;
import com.springrts.tasserver.commands.CommandProcessingException;
import com.springrts.tasserver.commands.SupportedCommand;
import java.util.List;

/**
* Sent by host of the battle adding a start rectangle for 'allyno' ally team.
* See lobby client implementation and Spring docs for more info on this one.
* "left", "top", "right" and "bottom" refer to a virtual rectangle that is
* 200x200 in size, where coordinates should be in interval [0, 200].
* @author hoijui
*/
@SupportedCommand("ADDSTARTRECT")
public class AddStartRectCommandProcessor extends AbstractCommandProcessor {

public AddStartRectCommandProcessor() {
super(5, 5, Account.Access.NORMAL);
}

@Override
public boolean process(Client client, List<String> args)
throws CommandProcessingException
{
boolean checksOk = super.process(client, args);
if (!checksOk) {
return false;
}

if (client.getBattleID() == Battle.NO_BATTLE_ID) {
return false;
}

Battle bat = getContext().getBattles().getBattleByID(client.getBattleID());
getContext().getBattles().verify(bat);

if (bat.getFounder() != client) {
return false;
}

int allyno, left, top, right, bottom;
try {
allyno = Integer.parseInt(args.get(0));
left = Integer.parseInt(args.get(1));
top = Integer.parseInt(args.get(2));
right = Integer.parseInt(args.get(3));
bottom = Integer.parseInt(args.get(4));
} catch (NumberFormatException e) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(getCommandName()).append(" command). You will now be disconnected ...").toString());
getContext().getClients().killClient(client, "Quit: inconsistent data");
return false;
}

StartRect startRect = bat.getStartRects().get(allyno);
if (startRect.isEnabled()) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(getCommandName()).append(" command). You will now be disconnected ...").toString());
getContext().getClients().killClient(client, "Quit: inconsistent data");
return false;
}

startRect.setEnabled(true);
startRect.setLeft(left);
startRect.setTop(top);
startRect.setRight(right);
startRect.setBottom(bottom);

bat.sendToAllExceptFounder(new StringBuilder("ADDSTARTRECT ")
.append(allyno).append(" ")
.append(left).append(" ")
.append(top).append(" ")
.append(right).append(" ")
.append(bottom).toString());

return true;
}
}
@@ -0,0 +1,86 @@
/*
Copyright (c) 2010 Robin Vobruba <robin.vobruba@derisk.ch>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package com.springrts.tasserver.commands.impl;


import com.springrts.tasserver.Account;
import com.springrts.tasserver.Battle;
import com.springrts.tasserver.Client;
import com.springrts.tasserver.StartRect;
import com.springrts.tasserver.commands.AbstractCommandProcessor;
import com.springrts.tasserver.commands.CommandProcessingException;
import com.springrts.tasserver.commands.SupportedCommand;
import java.util.List;

/**
* Sent by host of the battle removing a start rectangle for 'allyno' ally team.
* See client implementation and Spring docs for more info on this one.
* @author hoijui
*/
@SupportedCommand("REMOVESTARTRECT")
public class RemoveStartRectCommandProcessor extends AbstractCommandProcessor {

public RemoveStartRectCommandProcessor() {
super(1, 1, Account.Access.NORMAL);
}

@Override
public boolean process(Client client, List<String> args)
throws CommandProcessingException
{
boolean checksOk = super.process(client, args);
if (!checksOk) {
return false;
}

if (client.getBattleID() == Battle.NO_BATTLE_ID) {
return false;
}

Battle bat = getContext().getBattles().getBattleByID(client.getBattleID());
getContext().getBattles().verify(bat);

if (bat.getFounder() != client) {
return false;
}

int allyno;
try {
allyno = Integer.parseInt(args.get(0));
} catch (NumberFormatException e) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(getCommandName()).append(" command). You will now be disconnected ...").toString());
getContext().getClients().killClient(client, "Quit: inconsistent data");
return false;
}

StartRect startRect = bat.getStartRects().get(allyno);
if (!startRect.isEnabled()) {
client.sendLine(new StringBuilder("SERVERMSG Serious error: inconsistent data (")
.append(getCommandName()).append(" command). You will now be disconnected ...").toString());
getContext().getClients().killClient(client, "Quit: inconsistent data");
return false;
}

startRect.setEnabled(false);

bat.sendToAllExceptFounder(new StringBuilder("REMOVESTARTRECT ").append(allyno).toString());

return true;
}
}

0 comments on commit ba04ac5

Please sign in to comment.