/** * Updates and starts the new game. * * <p>Called in response to a requestLaunch message arriving at the PreGameInputHandler. * * <ol> * <li>Creates the game. * <li>Sends updated game information to the clients. * <li>Changes the game state to {@link net.sf.freecol.server.FreeColServer.GameState#IN_GAME}. * <li>Sends the "startGame"-message to the clients. * </ol> */ public void startGame() throws FreeColException { final FreeColServer freeColServer = getFreeColServer(); Game game = freeColServer.buildGame(); // Inform the clients. for (Player player : new ArrayList<Player>(game.getPlayers())) { if (!player.isAI()) { player.invalidateCanSeeTiles(); // Send clean copy of the game Connection conn = ((ServerPlayer) player).getConnection(); Element update = DOMMessage.createMessage("updateGame"); update.appendChild(game.toXMLElement(update.getOwnerDocument(), player)); try { conn.askDumping(update); } catch (IOException e) { logger.log(Level.WARNING, "Unable to updateGame", e); } } } // Start the game: freeColServer.setGameState(FreeColServer.GameState.IN_GAME); try { freeColServer.updateMetaServer(); } catch (NoRouteToServerException e) { } freeColServer.getServer().sendToAll(DOMMessage.createMessage("startGame")); freeColServer .getServer() .setMessageHandlerToAllConnections(freeColServer.getInGameInputHandler()); }