@Override
  public void updatePlayers(List<PlayerInfo> players) {
    lock.writeLock().lock();
    try {
      if (players == null) {
        return;
      }
      Iterator<PlayerInfo> iterator = players.iterator();
      while (iterator.hasNext()) {
        Player player = iterator.next();
        if (player.getName() == null) {
          iterator.remove();
        }
      }

      if (this.players.size() != players.size()) {
        throw new IllegalArgumentException("Diff players count");
      }

      for (int index = 0; index < players.size(); index++) {
        Player playerToUpdate = this.players.get(index);
        Player newPlayer = players.get(index);

        playerToUpdate.setCallbackUrl(newPlayer.getCallbackUrl());
        playerToUpdate.setName(newPlayer.getName());
      }
    } finally {
      lock.writeLock().unlock();
    }
  }
 @Override
 public void updatePlayer(Player player) {
   lock.writeLock().lock();
   try {
     for (Player playerToUpdate : players) {
       if (playerToUpdate.getName().equals(player.getName())) {
         playerToUpdate.setCallbackUrl(player.getCallbackUrl());
         return;
       }
     }
   } finally {
     lock.writeLock().unlock();
   }
 }