From: <mp...@us...> - 2010-03-29 10:45:21
|
Revision: 6659 http://freecol.svn.sourceforge.net/freecol/?rev=6659&view=rev Author: mpope Date: 2010-03-29 10:45:14 +0000 (Mon, 29 Mar 2010) Log Message: ----------- Cut over un/loadCargo to buildUpdate. Modified Paths: -------------- freecol/trunk/src/net/sf/freecol/client/control/InGameController.java freecol/trunk/src/net/sf/freecol/common/networking/LoadCargoMessage.java freecol/trunk/src/net/sf/freecol/common/networking/UnloadCargoMessage.java freecol/trunk/src/net/sf/freecol/server/control/InGameController.java Modified: freecol/trunk/src/net/sf/freecol/client/control/InGameController.java =================================================================== --- freecol/trunk/src/net/sf/freecol/client/control/InGameController.java 2010-03-29 10:41:19 UTC (rev 6658) +++ freecol/trunk/src/net/sf/freecol/client/control/InGameController.java 2010-03-29 10:45:14 UTC (rev 6659) @@ -606,8 +606,7 @@ private boolean askLoadCargo(Goods goods, Unit carrier) { Client client = freeColClient.getClient(); LoadCargoMessage message = new LoadCargoMessage(goods, carrier); - Element reply = askExpecting(client, message.toXMLElement(), - "update"); + Element reply = askExpecting(client, message.toXMLElement(), null); if (reply == null) return false; Connection conn = client.getConnection(); @@ -740,8 +739,7 @@ private boolean askUnloadCargo(Goods goods) { Client client = freeColClient.getClient(); UnloadCargoMessage message = new UnloadCargoMessage(goods); - Element reply = askExpecting(client, message.toXMLElement(), - "update"); + Element reply = askExpecting(client, message.toXMLElement(), null); if (reply == null) return false; Connection conn = client.getConnection(); Modified: freecol/trunk/src/net/sf/freecol/common/networking/LoadCargoMessage.java =================================================================== --- freecol/trunk/src/net/sf/freecol/common/networking/LoadCargoMessage.java 2010-03-29 10:41:19 UTC (rev 6658) +++ freecol/trunk/src/net/sf/freecol/common/networking/LoadCargoMessage.java 2010-03-29 10:45:14 UTC (rev 6659) @@ -19,21 +19,16 @@ package net.sf.freecol.common.networking; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import net.sf.freecol.common.model.Europe; -import net.sf.freecol.common.model.FreeColGameObject; import net.sf.freecol.common.model.Game; import net.sf.freecol.common.model.Goods; -import net.sf.freecol.common.model.Location; import net.sf.freecol.common.model.Player; -import net.sf.freecol.common.model.Tile; import net.sf.freecol.common.model.Unit; import net.sf.freecol.server.FreeColServer; import net.sf.freecol.server.model.ServerPlayer; +import org.w3c.dom.Element; + /** * The message sent when loading cargo onto a carrier. */ @@ -87,37 +82,16 @@ ServerPlayer serverPlayer = server.getPlayer(connection); Game game = server.getGame(); - Unit carrier; + Unit unit; try { - carrier = server.getUnitSafely(carrierId, serverPlayer); + unit = server.getUnitSafely(carrierId, serverPlayer); } catch (Exception e) { return Message.clientError(e.getMessage()); } // Perform the load. - goods.adjustAmount(); - try { - server.getInGameController().moveGoods(goods, carrier); - } catch (Exception e) { - return Message.clientError(e.getMessage()); - } - if (carrier.getInitialMovesLeft() != carrier.getMovesLeft()) { - carrier.setMovesLeft(0); - } - - // Build response. Only have to update the carrier location, - // as that *must* include the original location of the goods. - Element reply = Message.createNewRootElement("update"); - Document doc = reply.getOwnerDocument(); - Location loc = carrier.getLocation(); - if (loc instanceof Europe) { - reply.appendChild(((Europe) loc).toXMLElement(player, doc)); - } else if (loc instanceof Tile) { - reply.appendChild(((Tile) loc).toXMLElement(player, doc)); - } else { // ``Can not happen'' - throw new IllegalStateException("Carrier not in Europe or Tile."); - } - return reply; + return server.getInGameController() + .loadCargo(serverPlayer, unit, goods); } /** @@ -127,9 +101,8 @@ */ public Element toXMLElement() { Element result = createNewRootElement(getXMLElementTagName()); - Document doc = result.getOwnerDocument(); result.setAttribute("carrier", carrierId); - result.appendChild(goods.toXMLElement(null, doc)); + result.appendChild(goods.toXMLElement(null, result.getOwnerDocument())); return result; } Modified: freecol/trunk/src/net/sf/freecol/common/networking/UnloadCargoMessage.java =================================================================== --- freecol/trunk/src/net/sf/freecol/common/networking/UnloadCargoMessage.java 2010-03-29 10:41:19 UTC (rev 6658) +++ freecol/trunk/src/net/sf/freecol/common/networking/UnloadCargoMessage.java 2010-03-29 10:45:14 UTC (rev 6659) @@ -19,24 +19,22 @@ package net.sf.freecol.common.networking; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import net.sf.freecol.common.model.Colony; import net.sf.freecol.common.model.Game; import net.sf.freecol.common.model.Goods; import net.sf.freecol.common.model.Location; import net.sf.freecol.common.model.Player; -import net.sf.freecol.common.model.Tile; import net.sf.freecol.common.model.Unit; import net.sf.freecol.server.FreeColServer; import net.sf.freecol.server.model.ServerPlayer; +import org.w3c.dom.Element; + /** * The message sent when unloading cargo onto a carrier. */ public class UnloadCargoMessage extends Message { + /** * The goods to be unloaded. */ @@ -85,34 +83,16 @@ } else if (!(loc instanceof Unit)) { return Message.clientError("Unload from non-unit."); } - Unit carrier = (Unit) loc; - if (carrier.getOwner() != player) { + Unit unit = (Unit) loc; + if (unit.getOwner() != player) { return Message.clientError("Unload from non-owned unit."); - } else if (carrier.getTile() == null) { + } else if (unit.getTile() == null) { return Message.clientError("Unload from unit not on the map."); } // Perform the unload. - Tile tile = carrier.getTile(); - Colony colony = (tile.getSettlement() instanceof Colony) - ? (Colony) tile.getSettlement() - : null; - goods.adjustAmount(); - try { - server.getInGameController().moveGoods(goods, colony); - } catch (Exception e) { - return Message.clientError(e.getMessage()); - } - if (carrier.getInitialMovesLeft() != carrier.getMovesLeft()) { - carrier.setMovesLeft(0); - } - - // Build response. Only have to update the carrier location, - // as that *must* include the original location of the goods. - Element reply = Message.createNewRootElement("update"); - Document doc = reply.getOwnerDocument(); - reply.appendChild(tile.toXMLElement(player, doc)); - return reply; + return server.getInGameController() + .unloadCargo(serverPlayer, unit, goods); } /** @@ -122,8 +102,7 @@ */ public Element toXMLElement() { Element result = createNewRootElement(getXMLElementTagName()); - Document doc = result.getOwnerDocument(); - result.appendChild(goods.toXMLElement(null, doc)); + result.appendChild(goods.toXMLElement(null, result.getOwnerDocument())); return result; } Modified: freecol/trunk/src/net/sf/freecol/server/control/InGameController.java =================================================================== --- freecol/trunk/src/net/sf/freecol/server/control/InGameController.java 2010-03-29 10:41:19 UTC (rev 6658) +++ freecol/trunk/src/net/sf/freecol/server/control/InGameController.java 2010-03-29 10:45:14 UTC (rev 6659) @@ -3362,6 +3362,58 @@ /** + * Load cargo. + * + * @param serverPlayer The <code>ServerPlayer</code> that is loading. + * @param unit The <code>Unit</code> to load. + * @param goods The <code>Goods</code> to load. + * @return An <code>Element</code> encapsulating this action. + */ + public Element loadCargo(ServerPlayer serverPlayer, Unit unit, + Goods goods) { + goods.adjustAmount(); + moveGoods(goods, unit); + if (unit.getInitialMovesLeft() != unit.getMovesLeft()) { + unit.setMovesLeft(0); + } + + // Only have to update the carrier location, as that *must* + // include the original location of the goods. + // Others can see capacity change. + FreeColGameObject fcgo = (FreeColGameObject) unit.getLocation(); + sendToOthers(serverPlayer, fcgo); + return buildUpdate(serverPlayer, fcgo); + } + + /** + * Unload cargo. + * + * @param serverPlayer The <code>ServerPlayer</code> that is unloading. + * @param unit The <code>Unit</code> to unload. + * @param goods The <code>Goods</code> to unload. + * @return An <code>Element</code> encapsulating this action. + */ + public Element unloadCargo(ServerPlayer serverPlayer, Unit unit, + Goods goods) { + Tile tile = unit.getTile(); + Colony colony = (tile.getSettlement() instanceof Colony) + ? (Colony) tile.getSettlement() + : null; + goods.adjustAmount(); + moveGoods(goods, colony); + if (unit.getInitialMovesLeft() != unit.getMovesLeft()) { + unit.setMovesLeft(0); + } + + // Only have to update the carrier location, as that *must* + // include the location of the goods. + // Others can see the capacity change. + sendToOthers(serverPlayer, tile); + return buildUpdate(serverPlayer, tile); + } + + + /** * Clear the specialty of a unit. * * @param unit The <code>Unit</code> to clear the speciality of. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |