Moved timer code to AbstractTurnControl

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@383 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-06-08 15:59:59 +02:00
parent 8b763a817b
commit 67d084d48b
4 changed files with 51 additions and 45 deletions

View file

@ -1,8 +1,15 @@
package jrummikub.control.turn; package jrummikub.control.turn;
import java.util.ArrayList;
import java.util.List;
import jrummikub.control.ITurnTimer;
import jrummikub.control.TurnTimer;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.util.Connection;
import jrummikub.util.Event; import jrummikub.util.Event;
import jrummikub.util.IEvent; import jrummikub.util.IEvent;
import jrummikub.util.IListener;
import jrummikub.view.IView; import jrummikub.view.IView;
/** /**
@ -15,7 +22,10 @@ public abstract class AbstractTurnControl implements ITurnControl {
protected TurnInfo turnInfo; protected TurnInfo turnInfo;
protected GameSettings settings; protected GameSettings settings;
protected IView view; protected IView view;
protected ITurnTimer timer;
protected List<Connection> connections = new ArrayList<Connection>();
@Override @Override
public IEvent getEndOfTurnEvent() { public IEvent getEndOfTurnEvent() {
return endOfTurnEvent; return endOfTurnEvent;
@ -25,12 +35,34 @@ public abstract class AbstractTurnControl implements ITurnControl {
public IEvent getRedealEvent() { public IEvent getRedealEvent() {
return redealEvent; return redealEvent;
} }
protected abstract void timeOut();
@Override @Override
public void setup(TurnInfo info, GameSettings settings, IView view) { public void setup(TurnInfo info, GameSettings settings, IView view) {
turnInfo = info; turnInfo = info;
this.settings = settings; this.settings = settings;
this.view = view; this.view = view;
if (timer == null) {
timer = new TurnTimer(view);
}
connections.add(timer.getTimeRunOutEvent().add(new IListener() {
@Override
public void handle() {
timeOut();
}
}));
}
protected void cleanUp() {
timer.stopTimer();
for (Connection c : connections) {
c.remove();
}
}
public void abortTurn() {
cleanUp();
} }
} }

View file

@ -7,14 +7,10 @@ import java.util.TreeMap;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import jrummikub.control.AIUtil; import jrummikub.control.AIUtil;
import jrummikub.control.ITurnTimer;
import jrummikub.control.TurnTimer;
import jrummikub.model.Position; import jrummikub.model.Position;
import jrummikub.model.Stone; import jrummikub.model.Stone;
import jrummikub.model.StoneColor; import jrummikub.model.StoneColor;
import jrummikub.model.StoneSet; import jrummikub.model.StoneSet;
import jrummikub.util.Connection;
import jrummikub.util.IListener;
import jrummikub.util.Pair; import jrummikub.util.Pair;
/** /**
@ -23,24 +19,12 @@ import jrummikub.util.Pair;
*/ */
public class BaseAIControl extends AbstractTurnControl { public class BaseAIControl extends AbstractTurnControl {
private long startTime; private long startTime;
private ITurnTimer turnTimer;
private List<Connection> connections = new ArrayList<Connection>();
private Thread computeThread; private Thread computeThread;
private volatile boolean stopRunning = false; private volatile boolean stopRunning = false;
@Override @Override
public void startTurn() { public void startTurn() {
turnTimer = new TurnTimer(view);
connections.add(turnTimer.getTimeRunOutEvent().add(new IListener() {
@Override
public void handle() {
cleanUp();
endOfTurnEvent.emit();
}
}));
computeThread = new Thread(new Runnable() { computeThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -49,16 +33,17 @@ public class BaseAIControl extends AbstractTurnControl {
}); });
startTime = System.currentTimeMillis(); startTime = System.currentTimeMillis();
turnTimer.startTimer(); timer.startTimer();
computeThread.start(); computeThread.start();
} }
protected void timeOut() {
cleanUp();
endOfTurnEvent.emit();
}
private void cleanUp() { protected void cleanUp() {
turnTimer.stopTimer(); super.cleanUp();
for (Connection c : connections) {
c.remove();
}
stopRunning = true; stopRunning = true;
} }

View file

@ -7,13 +7,11 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import jrummikub.control.ITurnTimer; import jrummikub.control.ITurnTimer;
import jrummikub.control.TurnTimer;
import jrummikub.model.Hand; import jrummikub.model.Hand;
import jrummikub.model.Position; import jrummikub.model.Position;
import jrummikub.model.Stone; import jrummikub.model.Stone;
import jrummikub.model.StoneColor; import jrummikub.model.StoneColor;
import jrummikub.model.StoneSet; import jrummikub.model.StoneSet;
import jrummikub.util.Connection;
import jrummikub.util.IListener; import jrummikub.util.IListener;
import jrummikub.util.IListener1; import jrummikub.util.IListener1;
import jrummikub.util.IListener2; import jrummikub.util.IListener2;
@ -24,12 +22,8 @@ import jrummikub.view.IView.BottomPanelType;
* Controller for a single turn made by a human player * Controller for a single turn made by a human player
*/ */
public class HumanTurnControl extends AbstractTurnControl { public class HumanTurnControl extends AbstractTurnControl {
private ITurnTimer timer;
private List<Stone> selectedStones = new ArrayList<Stone>(); private List<Stone> selectedStones = new ArrayList<Stone>();
private List<Connection> connections = new ArrayList<Connection>();
/** /**
* Create a new human player's turn control * Create a new human player's turn control
*/ */
@ -54,20 +48,13 @@ public class HumanTurnControl extends AbstractTurnControl {
HumanTurnControl(ITurnTimer testTimer) { HumanTurnControl(ITurnTimer testTimer) {
this.timer = testTimer; this.timer = testTimer;
} }
protected void timeOut() {
endOfTurn(false);
}
@Override @Override
public void startTurn() { public void startTurn() {
if (this.timer == null) {
this.timer = new TurnTimer(view);
}
connections.add(timer.getTimeRunOutEvent().add(new IListener() {
@Override
public void handle() {
endOfTurn(false);
}
}));
addButtonHandlers(); addButtonHandlers();
addHandPanelHandlers(); addHandPanelHandlers();
@ -453,15 +440,12 @@ public class HumanTurnControl extends AbstractTurnControl {
} }
private void endOfTurn(boolean redeal) { private void endOfTurn(boolean redeal) {
timer.stopTimer(); cleanUp();
if (redeal) { if (redeal) {
redealEvent.emit(); redealEvent.emit();
} else { } else {
endOfTurnEvent.emit(); endOfTurnEvent.emit();
} }
for (Connection c : connections) {
c.remove();
}
view.setSelectedStones(new ArrayList<Stone>()); view.setSelectedStones(new ArrayList<Stone>());
} }

View file

@ -108,4 +108,9 @@ public interface ITurnControl {
return turnMode; return turnMode;
} }
} }
/**
* Abort the turn
*/
public void abortTurn();
} }