From 19b518d389f7ce9bd4b622b9a7a5d57d6f9372fd Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Tue, 7 Jun 2011 23:26:53 -0400 Subject: [PATCH] suppress calls when tournament is not visible --- .../client/tournament/TournamentPane.form | 6 +- .../client/tournament/TournamentPane.java | 20 +++-- .../client/tournament/TournamentPanel.java | 80 +++++++++++++------ 3 files changed, 75 insertions(+), 31 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.form b/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.form index 52e530488c1..c9eecb51c69 100644 --- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.form +++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.form @@ -19,17 +19,17 @@ - + - + - + diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.java b/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.java index b4d0d264673..7c5d8eb6cea 100644 --- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.java +++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPane.java @@ -50,7 +50,7 @@ public class TournamentPane extends MagePane { public void showTournament(UUID tournamentId) { this.setTitle("Tournament " + tournamentId); - this.tournamentPanel1.showTournament(tournamentId); + this.tournamentPanel.showTournament(tournamentId); this.repaint(); } @@ -63,17 +63,17 @@ public class TournamentPane extends MagePane { // //GEN-BEGIN:initComponents private void initComponents() { - tournamentPanel1 = new mage.client.tournament.TournamentPanel(); + tournamentPanel = new mage.client.tournament.TournamentPanel(); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tournamentPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 758, Short.MAX_VALUE) + .addComponent(tournamentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 758, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tournamentPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 522, Short.MAX_VALUE) + .addComponent(tournamentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 526, Short.MAX_VALUE) ); pack(); @@ -81,7 +81,17 @@ public class TournamentPane extends MagePane { // Variables declaration - do not modify//GEN-BEGIN:variables - private mage.client.tournament.TournamentPanel tournamentPanel1; + private mage.client.tournament.TournamentPanel tournamentPanel; // End of variables declaration//GEN-END:variables + @Override + public void activated() { + tournamentPanel.startTasks(); + } + + @Override + public void deactivated() { + tournamentPanel.stopTasks(); + } + } diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java index 20e8f4e1ba9..c61de38e637 100644 --- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java +++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java @@ -38,10 +38,13 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Observable; import java.util.Observer; import java.util.UUID; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; import javax.swing.*; import javax.swing.table.AbstractTableModel; import mage.client.MageFrame; @@ -58,7 +61,7 @@ import org.apache.log4j.Logger; * * @author BetaSteward_at_googlemail.com */ -public class TournamentPanel extends javax.swing.JPanel implements Observer { +public class TournamentPanel extends javax.swing.JPanel { private final static Logger logger = Logger.getLogger(TournamentPanel.class); @@ -66,7 +69,7 @@ public class TournamentPanel extends javax.swing.JPanel implements Observer { private Session session; private TournamentPlayersTableModel playersModel; private TournamentMatchesTableModel matchesModel; - private TournamentWatchdog tournamentWatchdog = new TournamentWatchdog(); + private UpdateTournamentTask updateTask; /** Creates new form TournamentPanel */ public TournamentPanel() { @@ -105,7 +108,7 @@ public class TournamentPanel extends javax.swing.JPanel implements Observer { UUID chatRoomId = session.getTournamentChatId(tournamentId); if (session.joinTournament(tournamentId) && chatRoomId != null) { this.chatPanel1.connect(chatRoomId); - tournamentWatchdog.addObserver(this); + startTasks(); this.setVisible(true); this.repaint(); } @@ -124,20 +127,26 @@ public class TournamentPanel extends javax.swing.JPanel implements Observer { } } - @Override - public void update(Observable arg0, Object arg1) { - TournamentView tournament; - try { - tournament = MageFrame.getSession().getTournament(tournamentId); - playersModel.loadData(tournament); - matchesModel.loadData(tournament); - this.tablePlayers.repaint(); - this.tableMatches.repaint(); - } catch (MageRemoteException ex) { - hideTournament(); + public void update(TournamentView tournament) { + playersModel.loadData(tournament); + matchesModel.loadData(tournament); + this.tablePlayers.repaint(); + this.tableMatches.repaint(); + } + + public void startTasks() { + if (session != null) { + if (updateTask == null || updateTask.isDone()) { + updateTask = new UpdateTournamentTask(session, tournamentId, this); + updateTask.execute(); + } } } - + + public void stopTasks() { + if (updateTask != null) + updateTask.cancel(true); + } /** This method is called from within the constructor to * initialize the form. @@ -319,18 +328,43 @@ class TournamentMatchesTableModel extends AbstractTableModel { } -class TournamentWatchdog extends Observable implements ActionListener { +class UpdateTournamentTask extends SwingWorker { - Timer t = new Timer(1000, this); // check every second + private Session session; + private UUID tournamentId; + private TournamentPanel panel; - public TournamentWatchdog() { - t.start(); + private final static Logger logger = Logger.getLogger(UpdateTournamentTask.class); + + UpdateTournamentTask(Session session, UUID tournamentId, TournamentPanel panel) { + this.session = session; + this.tournamentId = tournamentId; + this.panel = panel; } @Override - public void actionPerformed(ActionEvent arg0) { - setChanged(); - notifyObservers(); + protected Void doInBackground() throws Exception { + while (!isCancelled()) { + this.publish(session.getTournament(tournamentId)); + Thread.sleep(1000); + } + return null; } -} \ No newline at end of file + @Override + protected void process(List view) { + panel.update(view.get(0)); + } + + @Override + protected void done() { + try { + get(); + } catch (InterruptedException ex) { + logger.fatal("Update Tournament Task error", ex); + } catch (ExecutionException ex) { + logger.fatal("Update Tournament Task error", ex); + } catch (CancellationException ex) {} + } + +}