/** * The constructor to use. * * @param freeColServer The main server object. */ public InGameInputHandler(final FreeColServer freeColServer) { super(freeColServer); // TODO: move and simplify methods later, for now just delegate // TODO: check that NRHs and CPNRHs are sensibly chosen // Messages that are not specialized are trivial elements identified // by tag name only. register( AbandonColonyMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new AbandonColonyMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( AskSkillMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new AskSkillMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( AssignTeacherMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new AssignTeacherMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( AttackMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new AttackMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( BuildColonyMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new BuildColonyMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( BuyMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new BuyMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( BuyGoodsMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new BuyGoodsMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( BuyPropositionMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new BuyPropositionMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( CashInTreasureTrainMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new CashInTreasureTrainMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( ChangeStateMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ChangeStateMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( ChangeWorkImprovementTypeMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ChangeWorkImprovementTypeMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( ChangeWorkTypeMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ChangeWorkTypeMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( ClaimLandMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ClaimLandMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( ClearSpecialityMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ClearSpecialityMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( CloseTransactionMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new CloseTransactionMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DeclareIndependenceMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DeclareIndependenceMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DeclineMoundsMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DeclineMoundsMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DeliverGiftMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DeliverGiftMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DemandTributeMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DemandTributeMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DisbandUnitMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DisbandUnitMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( DisembarkMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new DisembarkMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( EmbarkMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new EmbarkMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( EmigrateUnitMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new EmigrateUnitMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( "endTurn", new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return freeColServer.getInGameController().endTurn(freeColServer.getPlayer(connection)); } }); register( EquipUnitMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new EquipUnitMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( "getREFUnits", new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return freeColServer .getInGameController() .getREFUnits(freeColServer.getPlayer(connection)); } }); register( GetTransactionMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new GetTransactionMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( GoodsForSaleMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new GoodsForSaleMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( InciteMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new InciteMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( IndianDemandMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new IndianDemandMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( JoinColonyMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new JoinColonyMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( LearnSkillMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new LearnSkillMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( LoadCargoMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new LoadCargoMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( LootCargoMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new LootCargoMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( MissionaryMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new MissionaryMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( MoveMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new MoveMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( MoveToMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new MoveToMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( NewLandNameMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new NewLandNameMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( NewRegionNameMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new NewRegionNameMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( PayArrearsMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new PayArrearsMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( PayForBuildingMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new PayForBuildingMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( PutOutsideColonyMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new PutOutsideColonyMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( RenameMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new RenameMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( ScoutIndianSettlementMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new ScoutIndianSettlementMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( SellMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new SellMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( SellGoodsMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new SellGoodsMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( SellPropositionMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new SellPropositionMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( SetBuildQueueMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new SetBuildQueueMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( SetGoodsLevelsMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new SetGoodsLevelsMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( TrainUnitInEuropeMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new TrainUnitInEuropeMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( UnloadCargoMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new UnloadCargoMessage(getGame(), element) .handle(freeColServer, player, connection); } }); register( WorkMessage.getXMLElementTagName(), new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { return new WorkMessage(getGame(), element).handle(freeColServer, player, connection); } }); register( "multiple", new CurrentPlayerNetworkRequestHandler() { @Override public Element handle(Player player, Connection connection, Element element) { NodeList nodes = element.getChildNodes(); List<Element> results = new ArrayList<Element>(); for (int i = 0; i < nodes.getLength(); i++) { try { Element reply = super.handle(connection, (Element) nodes.item(i)); if (reply != null) results.add(reply); } catch (Exception e) { logger.log(Level.WARNING, "Crash in multiple, item " + i + ", continuing.", e); } } return DOMMessage.collapseElements(results); } }); // NetworkRequestHandlers register( AssignTradeRouteMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new AssignTradeRouteMessage(getGame(), element) .handle(freeColServer, connection); } }); register( "checkHighScore", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .checkHighScore(freeColServer.getPlayer(connection)); } }); register( "continuePlaying", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .continuePlaying(freeColServer.getPlayer(connection)); } }); register( DiplomacyMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new DiplomacyMessage(getGame(), element).handle(freeColServer, connection); } }); register( "enterRevengeMode", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .enterRevengeMode(freeColServer.getPlayer(connection)); } }); register( "getHighScores", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .getHighScores(freeColServer.getPlayer(connection)); } }); register( GetNationSummaryMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new GetNationSummaryMessage(element).handle(freeColServer, connection); } }); register( "getNewTradeRoute", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .getNewTradeRoute(freeColServer.getPlayer(connection)); } }); register( "retire", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer.getInGameController().retire(freeColServer.getPlayer(connection)); } }); register( SetDestinationMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new SetDestinationMessage(getGame(), element).handle(freeColServer, connection); } }); register( SetTradeRoutesMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new SetTradeRoutesMessage(getGame(), element).handle(freeColServer, connection); } }); register( SpySettlementMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new SpySettlementMessage(getGame(), element).handle(freeColServer, connection); } }); register( "getStatistics", new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return freeColServer .getInGameController() .getStatistics(freeColServer.getPlayer(connection)); } }); register( UpdateCurrentStopMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new UpdateCurrentStopMessage(getGame(), element) .handle(freeColServer, connection); } }); register( UpdateTradeRouteMessage.getXMLElementTagName(), new NetworkRequestHandler() { @Override public Element handle(Connection connection, Element element) { return new UpdateTradeRouteMessage(getGame(), element) .handle(freeColServer, connection); } }); }