Fix network synchonization...
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@584 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
21f144f963
commit
db71793761
1 changed files with 28 additions and 26 deletions
|
@ -1,5 +1,7 @@
|
|||
package jrummikub.control.network;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import jrummikub.control.RoundControl;
|
||||
import jrummikub.control.turn.ITurnControl;
|
||||
import jrummikub.model.IRoundState;
|
||||
|
@ -13,8 +15,8 @@ import jrummikub.view.IView;
|
|||
*/
|
||||
public class NetworkRoundControl extends RoundControl {
|
||||
private IConnectionControl connectionControl;
|
||||
private boolean wasActive;
|
||||
private boolean currentlyActive;
|
||||
private boolean currentlyActive = false;
|
||||
private boolean inited = false;
|
||||
|
||||
/**
|
||||
* Creates new network round control
|
||||
|
@ -29,18 +31,19 @@ public class NetworkRoundControl extends RoundControl {
|
|||
* true for host
|
||||
*/
|
||||
public NetworkRoundControl(IRoundState roundState, IView view,
|
||||
final IConnectionControl connectionControl, boolean startActive) {
|
||||
final IConnectionControl connectionControl, final boolean startActive) {
|
||||
super(roundState, view, false);
|
||||
|
||||
this.connectionControl = connectionControl;
|
||||
wasActive = startActive;
|
||||
currentlyActive = startActive;
|
||||
|
||||
connections.add(connectionControl.getRoundStateUpdateEvent().add(
|
||||
new IListener1<IRoundState>() {
|
||||
@Override
|
||||
public void handle(IRoundState state) {
|
||||
setRoundState(state);
|
||||
currentlyActive = startActive;
|
||||
updateActive();
|
||||
inited = true;
|
||||
prepareTurn();
|
||||
}
|
||||
}));
|
||||
|
@ -58,6 +61,17 @@ public class NetworkRoundControl extends RoundControl {
|
|||
}));
|
||||
}
|
||||
|
||||
private void updateActive() {
|
||||
switch (roundState.getActivePlayer().getPlayerSettings().getType()) {
|
||||
case HUMAN:
|
||||
currentlyActive = true;
|
||||
break;
|
||||
case NETWORK:
|
||||
currentlyActive = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addTurnControlListeners(ITurnControl turnControl) {
|
||||
turnControl.getTableUpdateEvent().add(new IListener1<ITable>() {
|
||||
|
@ -79,22 +93,12 @@ public class NetworkRoundControl extends RoundControl {
|
|||
|
||||
@Override
|
||||
protected void prepareTurn() {
|
||||
switch (roundState.getActivePlayer().getPlayerSettings().getType()) {
|
||||
case HUMAN:
|
||||
currentlyActive = true;
|
||||
break;
|
||||
case NETWORK:
|
||||
currentlyActive = false;
|
||||
break;
|
||||
if (!inited) {
|
||||
return;
|
||||
}
|
||||
|
||||
doPrepareTurn();
|
||||
|
||||
if (showStartTurnPanel() == null) {
|
||||
if (currentlyActive) {
|
||||
connectionControl.startTurn();
|
||||
}
|
||||
}
|
||||
updateActive();
|
||||
super.prepareTurn();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -108,10 +112,8 @@ public class NetworkRoundControl extends RoundControl {
|
|||
protected void deal() {
|
||||
super.deal();
|
||||
|
||||
if (currentlyActive) {
|
||||
connectionControl.updateRoundState(roundState);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void nextPlayer() {
|
||||
|
|
Reference in a new issue