Fix network mode

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@521 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-06-21 01:24:10 +02:00
parent 2f08091b65
commit 0b1151e6af
5 changed files with 117 additions and 6 deletions

View file

@ -44,6 +44,10 @@ public class MockConnectionControl implements IConnectionControl {
/** */
public MockEvent2<IRoundState, InvalidTurnInfo> turnEndEvent = new MockEvent2<IRoundState, InvalidTurnInfo>();
/** */
public MockEvent1<IRoundState> roundStateUpdateEvent = new MockEvent1<IRoundState>();
/** */
public MockEvent nextPlayerEvent = new MockEvent();
/** */
public MockEvent turnStartEvent = new MockEvent();
/** */
public GameData currentGame;
@ -147,6 +151,16 @@ public class MockConnectionControl implements IConnectionControl {
return turnStartEvent;
}
@Override
public IEvent1<IRoundState> getRoundStateUpdateEvent() {
return roundStateUpdateEvent;
}
@Override
public IEvent getNextPlayerEvent() {
return nextPlayerEvent;
}
@Override
public void offerGame(GameData data) {
offeredGame = data;
@ -217,4 +231,16 @@ public class MockConnectionControl implements IConnectionControl {
// TODO Auto-generated method stub
}
@Override
public void updateRoundState(IRoundState roundState) {
// TODO Auto-generated method stub
}
@Override
public void nextPlayer() {
// TODO Auto-generated method stub
}
}

View file

@ -264,7 +264,7 @@ public class RoundControl {
return TurnControlFactory.getFactory(type).create();
}
void deal() {
protected void deal() {
for (int i = 0; i < roundState.getPlayerCount(); i++) {
IHand hand = roundState.getNthNextPlayer(i).getHand();
for (int j = 0; j < roundState.getGameSettings().getNumberOfStonesDealt(); j++) {
@ -276,8 +276,9 @@ public class RoundControl {
}
protected void endOfTurn(InvalidTurnInfo invalidTurnInfo) {
boolean wasHuman = (turnControl instanceof HumanTurnControl);
boolean wasAI = (turnControl instanceof AIControl);
boolean wasAI = turnControl instanceof AIControl;
boolean wasHuman = turnControl instanceof HumanTurnControl;
turnControl = null;
view.getTablePanel().setStoneSets(invalidTurnInfo.getTable());
@ -314,10 +315,13 @@ public class RoundControl {
}
view.setBottomPanel(BottomPanelType.NONHUMAN_HAND_PANEL);
if (wasHuman || wasAI) {
nextPlayer();
}
}
private void nextPlayer() {
protected void nextPlayer() {
view.setSelectedStones(Collections.<Stone> emptyList());
view.setInvalidStoneSets(Collections.<StoneSet> emptyList());
view.setStoneCollectionHidden(false);

View file

@ -85,9 +85,11 @@ public class ConnectionControl implements IConnectionControl {
private Event gameStartEvent = new Event();
private Event roundStartEvent = new Event();
private Event1<IRoundState> roundStateUpdateEvent = new Event1<IRoundState>();
private Event1<ITable> tableUpdateEvent = new Event1<ITable>();
private Event2<IRoundState, InvalidTurnInfo> turnEndEvent = new Event2<IRoundState, InvalidTurnInfo>();
private Event nextPlayerEvent = new Event();
private Event turnStartEvent = new Event();
private GameData currentGame;
@ -181,6 +183,11 @@ public class ConnectionControl implements IConnectionControl {
return roundStartEvent;
}
@Override
public IEvent1<IRoundState> getRoundStateUpdateEvent() {
return roundStateUpdateEvent;
}
@Override
public IEvent1<ITable> getTableUpdateEvent() {
return tableUpdateEvent;
@ -191,6 +198,11 @@ public class ConnectionControl implements IConnectionControl {
return turnEndEvent;
}
@Override
public IEvent getNextPlayerEvent() {
return nextPlayerEvent;
}
@Override
public IEvent getTurnStartEvent() {
return turnStartEvent;
@ -312,6 +324,20 @@ public class ConnectionControl implements IConnectionControl {
});
}
@Override
public void updateRoundState(final IRoundState roundState) {
final UUID uuid = currentGame.getGameID();
run(new SendRunner() {
@Override
protected void addData(DefaultPacketExtension extension) {
extension.setValue("messageType", "round_state_update");
extension.setValue("uuid", uuid.toString());
extension.setValue("state",
Base64.encodeObject(roundState, Base64.GZIP));
}
});
}
@Override
public void updateTable(final ITable table) {
final UUID uuid = currentGame.getGameID();
@ -340,6 +366,18 @@ public class ConnectionControl implements IConnectionControl {
});
}
@Override
public void nextPlayer() {
final UUID uuid = currentGame.getGameID();
run(new SendRunner() {
@Override
protected void addData(DefaultPacketExtension extension) {
extension.setValue("messageType", "next_player");
extension.setValue("uuid", uuid.toString());
}
});
}
@Override
public void startTurn() {
final UUID uuid = currentGame.getGameID();
@ -459,6 +497,9 @@ public class ConnectionControl implements IConnectionControl {
gameStartEvent.emit();
} else if (messageType.equals("round_start")) {
roundStartEvent.emit();
} else if (messageType.equals("round_state_update")) {
roundStateUpdateEvent.emit((IRoundState) Base64.decodeToObject(extension
.getValue("state")));
} else if (messageType.equals("table_update")) {
tableUpdateEvent.emit((ITable) Base64.decodeToObject(extension
.getValue("table")));
@ -466,6 +507,8 @@ public class ConnectionControl implements IConnectionControl {
TurnEndData data = (TurnEndData) Base64.decodeToObject(extension
.getValue("data"));
turnEndEvent.emit(data.getRoundState(), data.getInvalidTurnInfo());
} else if (messageType.equals("next_player")) {
nextPlayerEvent.emit();
} else if (messageType.equals("turn_start")) {
turnStartEvent.emit();
} else {

View file

@ -40,10 +40,14 @@ interface IConnectionControl {
public IEvent getRoundStartEvent();
public IEvent1<IRoundState> getRoundStateUpdateEvent();
public IEvent1<ITable> getTableUpdateEvent();
public IEvent2<IRoundState, InvalidTurnInfo> getTurnEndEvent();
public IEvent getNextPlayerEvent();
public IEvent getTurnStartEvent();
public void offerGame(GameData data);
@ -66,10 +70,13 @@ interface IConnectionControl {
public void startRound();
public void updateRoundState(IRoundState roundState);
public void updateTable(ITable table);
public void endTurn(IRoundState state, InvalidTurnInfo invalidTurnInfo);
public void startTurn();
public void nextPlayer();
public void startTurn();
}

View file

@ -20,12 +20,27 @@ public class NetworkRoundControl extends RoundControl {
this.connectionControl = connectionControl;
currentlyActive = startActive;
connections.add(connectionControl.getRoundStateUpdateEvent().add(
new IListener1<IRoundState>() {
@Override
public void handle(IRoundState state) {
NetworkControl.fixGameSettings(state.getGameSettings(),
connectionControl.getNickname());
setRoundState(state);
}
}));
connections.add(connectionControl.getTurnStartEvent().add(new IListener() {
@Override
public void handle() {
startTurn();
}
}));
connections.add(connectionControl.getNextPlayerEvent().add(new IListener() {
@Override
public void handle() {
NetworkRoundControl.super.nextPlayer();
}
}));
}
@Override
@ -67,6 +82,22 @@ public class NetworkRoundControl extends RoundControl {
}
}
@Override
protected void deal() {
super.deal();
if (currentlyActive) {
connectionControl.updateRoundState(roundState);
}
}
@Override
protected void nextPlayer() {
if (currentlyActive) {
connectionControl.nextPlayer();
}
}
@Override
protected void endOfTurn(InvalidTurnInfo invalidTurnInfo) {
if (currentlyActive) {