Ejemplo n.º 1
0
  /**
   * 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());
  }