Ejemplo n.º 1
0
  @Test
  public void shouldSendUpdateWhenOnePlayerRequested() throws UnsupportedEncodingException {
    sender.scheduleUpdate(updateRequestFor("vasya"));

    sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap());

    assertContainsPlayerBoard(response.getContentAsString(), "vasya", "vasyaboard");
  }
Ejemplo n.º 2
0
  @Test
  public void shouldIgnoreNonRequestedPlayerData() throws UnsupportedEncodingException {
    sender.scheduleUpdate(updateRequestFor("vasya"));

    sender.sendUpdates(screenFor("petya", "petyaboard").asMap());

    assertTrue(asyncContext.isComplete());
  }
Ejemplo n.º 3
0
  @Test
  public void shouldCompleteResponseWhenExceptionOnWrite() throws IOException {
    response.setCharacterEncoding("NON_EXISTENT_ENCODING_FOR_IO_EXCEPTION");
    sender.scheduleUpdate(updateRequestFor("vasya"));

    sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap());

    assertTrue(asyncContext.isComplete());
  }
Ejemplo n.º 4
0
  @Test
  public void shouldSendScores() throws UnsupportedEncodingException {
    sender.scheduleUpdate(updateRequestFor("vasya"));

    sender.sendUpdates(screenFor("vasya", 345, "vasyaboard").asMap());

    JsonPath jsonPath = from(response.getContentAsString());
    assertEquals(345, jsonPath.getInt("vasya.score"));
  }
Ejemplo n.º 5
0
  @Test
  public void shouldSendToRequestedPlayersOnly() throws UnsupportedEncodingException {
    sender.scheduleUpdate(updateRequestFor("vasya"));

    sender.sendUpdates(
        screenFor("petya", "petyaboard").addScreenFor("vasya", 123, "vasyaboard").asMap());

    JsonPath jsonPath = from(response.getContentAsString());
    assertNull("Should contain only requested user screens", jsonPath.get("petyaboard"));
  }
Ejemplo n.º 6
0
  @Test
  public void shouldSendUpdateForAllPlayersWhenRequested() throws UnsupportedEncodingException {
    sender.scheduleUpdate(new UpdateRequest(asyncContext, true, null));

    sender.sendUpdates(
        screenFor("petya", "petyaboard").addScreenFor("vasya", 123, "vasyaboard").asMap());

    assertContainsPlayerBoard(response.getContentAsString(), "vasya", "vasyaboard");
    assertContainsPlayerBoard(response.getContentAsString(), "petya", "petyaboard");
  }
Ejemplo n.º 7
0
  @Test
  public void shouldRemoveRequestWhenProcessed() throws UnsupportedEncodingException {
    sender.scheduleUpdate(updateRequestFor("vasya"));
    sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap());
    response.setWriterAccessAllowed(false);

    try {
      sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap());
    } catch (Exception e) {
      fail("Should send only once");
    }
  }
Ejemplo n.º 8
0
  @Test
  public void shouldSendOtherUpdatesWhenExceptionOnWrite() throws UnsupportedEncodingException {
    MockHttpServletResponse exceptionResponse = new MockHttpServletResponse();
    exceptionResponse.setCharacterEncoding("NON_EXISTENT_ENCODING_FOR_IO_EXCEPTION");
    MockAsyncContext exceptionContext = new MockAsyncContext(exceptionResponse);
    sender.scheduleUpdate(new UpdateRequest(exceptionContext, "exception"));
    sender.scheduleUpdate(updateRequestFor("petya"));

    sender.sendUpdates(
        screenFor("petya", "petyaboard").addScreenFor("exception", 123, "exceptionboard").asMap());

    assertContainsPlayerBoard(response.getContentAsString(), "petya", "petyaboard");
    assertTrue(exceptionContext.isComplete());
  }
Ejemplo n.º 9
0
  @Override
  public void nextStepForAllGames() {
    lock.writeLock().lock();
    try {
      for (Game game : games) {
        if (game.isGameOver()) {
          game.newGame();
        }
        game.tick();
      }

      HashMap<Player, PlayerData> map = new HashMap<Player, PlayerData>();
      for (int i = 0; i < games.size(); i++) {
        Game game = games.get(i);

        Player player = players.get(i);

        map.put(
            player,
            new PlayerData(
                gameType.getBoardSize(),
                decoder.encode(game.getBoardAsString()),
                player.getScore(),
                game.getMaxScore(),
                game.getCurrentScore(),
                player.getCurrentLevel() + 1,
                player.getMessage()));
      }

      screenSender.sendUpdates(map);

      for (int index = 0; index < players.size(); index++) {
        Player player = players.get(index);
        Game game = games.get(index);
        try {
          String board = game.getBoardAsString().replace("\n", "");

          if (logger.isDebugEnabled()) {
            logger.debug(String.format("Sent for player '%s' board \n%s", player, board));
          }

          controllers.get(index).requestControl(player, board);
        } catch (IOException e) {
          logger.error(
              "Unable to send control request to player "
                  + player.getName()
                  + " URL: "
                  + player.getCallbackUrl(),
              e);
        }
      }
    } catch (Error e) {
      e.printStackTrace();
      logger.error("nextStepForAllGames throws", e);
    } finally {
      lock.writeLock().unlock();
    }
  }