package magic.ui.screen.duel.decks;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import javax.swing.SwingWorker;
import magic.model.MagicDuel;
import magic.model.MagicGame;
import magic.utility.MagicSystem;
class NewGameWorker extends SwingWorker<MagicGame, Void> {
private final MagicDuel duel;
private final DuelDecksScreen screen;
NewGameWorker(final MagicDuel aDuel, final DuelDecksScreen aScreen) {
duel = aDuel;
screen = aScreen;
}
@Override
protected MagicGame doInBackground() throws Exception {
return duel.nextGame();
}
@Override
protected void done() {
screen.setNextGame(getNextGame());
}
private MagicGame getNextGame() {
try {
return get();
} catch (ExecutionException ex) {
throw new RuntimeException(ex);
} catch (InterruptedException ex) {
System.err.println(ex);
return null;
} catch (CancellationException ex) {
System.err.println("Worker cancelled : " + MagicSystem.getHeapUtilizationStats().replace("\n", ", "));
return null;
}
}
}