Fix bug #1705809, send export level, low level and high level of each goods type to server

This commit is contained in:
sergiocambra 2007-05-01 19:40:41 +00:00
parent 68f574a130
commit 0e62185e8f
4 changed files with 45 additions and 24 deletions

1
build/.cvsignore Normal file
View File

@ -0,0 +1 @@
net

View File

@ -1765,16 +1765,22 @@ public final class InGameController implements NetworkConstants {
* @param colony The colony with the custom house.
* @param goods The goods for which to set the settings.
*/
public void setExports(Colony colony, int goodsType, boolean value) {
public void setGoodsLevels(Colony colony, int goodsType) {
Client client = freeColClient.getClient();
boolean export = colony.getExports(goodsType);
int exportLevel = colony.getExportLevel()[goodsType];
int highLevel = colony.getHighLevel()[goodsType];
int lowLevel = colony.getLowLevel()[goodsType];
Element setExportsElement = Message.createNewRootElement("setExports");
setExportsElement.setAttribute("colony", colony.getID());
setExportsElement.setAttribute("goods", String.valueOf(goodsType));
setExportsElement.setAttribute("value", String.valueOf(value));
Element setGoodsLevelsElement = Message.createNewRootElement("setGoodsLevels");
setGoodsLevelsElement.setAttribute("colony", colony.getID());
setGoodsLevelsElement.setAttribute("goods", String.valueOf(goodsType));
setGoodsLevelsElement.setAttribute("export", String.valueOf(export));
setGoodsLevelsElement.setAttribute("exportLevel", String.valueOf(exportLevel));
setGoodsLevelsElement.setAttribute("highLevel", String.valueOf(highLevel));
setGoodsLevelsElement.setAttribute("lowLevel", String.valueOf(lowLevel));
colony.setExports(goodsType, value);
client.sendAndWait(setExportsElement);
client.sendAndWait(setGoodsLevelsElement);
}
/**

View File

@ -200,14 +200,21 @@ public final class WarehouseDialog extends FreeColDialog implements ActionListen
}
public void saveSettings() {
if (export.isSelected() != colony.getExports(goodsType)) {
parent.getClient().getInGameController().setExports(colony, goodsType, export.isSelected());
colony.setExports(goodsType, export.isSelected());
int lowLevelValue = ((SpinnerNumberModel) lowLevel.getModel()).getNumber().intValue();
int highLevelValue = ((SpinnerNumberModel) highLevel.getModel()).getNumber().intValue();
int exportLevelValue = ((SpinnerNumberModel) exportLevel.getModel()).getNumber().intValue();
boolean changed = (export.isSelected() != colony.getExports(goodsType))
|| (lowLevelValue != colony.getLowLevel()[goodsType])
|| (highLevelValue != colony.getHighLevel()[goodsType])
|| (exportLevelValue != colony.getExportLevel()[goodsType]);
colony.setExports(goodsType, export.isSelected());
colony.getLowLevel()[goodsType] = lowLevelValue;
colony.getHighLevel()[goodsType] = highLevelValue;
colony.getExportLevel()[goodsType] = exportLevelValue;
if (changed) {
parent.getClient().getInGameController().setGoodsLevels(colony, goodsType);
}
colony.getLowLevel()[goodsType] = ((SpinnerNumberModel) lowLevel.getModel()).getNumber().intValue();
colony.getHighLevel()[goodsType] = ((SpinnerNumberModel) highLevel.getModel()).getNumber().intValue();
colony.getExportLevel()[goodsType] = ((SpinnerNumberModel) exportLevel.getModel()).getNumber().intValue();
}
}

View File

@ -320,10 +320,10 @@ public final class InGameInputHandler extends InputHandler implements NetworkCon
return payArrears(connection, element);
}
});
register("setExports", new CurrentPlayerNetworkRequestHandler() {
register("setGoodsLevels", new CurrentPlayerNetworkRequestHandler() {
@Override
public Element handle(Player player, Connection connection, Element element) {
return setExports(connection, element);
return setGoodsLevels(connection, element);
}
});
register("declareIndependence", new CurrentPlayerNetworkRequestHandler() {
@ -1876,17 +1876,17 @@ public final class InGameInputHandler extends InputHandler implements NetworkCon
}
/**
* Handles a "setExports"-request from a client.
* Handles a "setGoodsLevels"-request from a client.
*
* @param connection The connection the message came from.
* @param setExportsElement The element containing the request.
* @param setGoodsLevelsElement The element containing the request.
*/
private Element setExports(Connection connection, Element setExportsElement) {
private Element setGoodsLevels(Connection connection, Element setGoodsLevelsElement) {
Game game = getFreeColServer().getGame();
ServerPlayer player = getFreeColServer().getPlayer(connection);
Colony colony = (Colony) game.getFreeColGameObject(setExportsElement.getAttribute("colony"));
Colony colony = (Colony) game.getFreeColGameObject(setGoodsLevelsElement.getAttribute("colony"));
if (colony == null) {
throw new IllegalArgumentException("Found no colony with ID " + setExportsElement.getAttribute("colony"));
throw new IllegalArgumentException("Found no colony with ID " + setGoodsLevelsElement.getAttribute("colony"));
} else if (colony.getOwner() != player) {
throw new IllegalStateException("Not your colony!");
/**
@ -1895,9 +1895,16 @@ public final class InGameInputHandler extends InputHandler implements NetworkCon
* new IllegalStateException("Colony has no custom house!");
*/
}
int goods = Integer.valueOf(setExportsElement.getAttribute("goods")).intValue();
boolean value = Boolean.valueOf(setExportsElement.getAttribute("value")).booleanValue();
colony.setExports(goods, value);
int goods = Integer.valueOf(setGoodsLevelsElement.getAttribute("goods")).intValue();
boolean export = Boolean.valueOf(setGoodsLevelsElement.getAttribute("export")).booleanValue();
int exportLevel = Integer.valueOf(setGoodsLevelsElement.getAttribute("exportLevel")).intValue();
int highLevel = Integer.valueOf(setGoodsLevelsElement.getAttribute("highLevel")).intValue();
int lowLevel = Integer.valueOf(setGoodsLevelsElement.getAttribute("lowLevel")).intValue();
colony.setExports(goods, export);
colony.getExportLevel()[goods] = exportLevel;
colony.getHighLevel()[goods] = highLevel;
colony.getLowLevel()[goods] = lowLevel;
return null;
}