package jrummikub.control.network; import jrummikub.control.RoundControl.InvalidTurnInfo; import jrummikub.control.turn.AbstractTurnControl; import jrummikub.model.IRoundState; import jrummikub.model.ITable; import jrummikub.util.Event1; import jrummikub.util.IEvent1; import jrummikub.util.IListener; import jrummikub.util.IListener1; import jrummikub.util.IListener2; /** * Turn control for network games */ public class NetworkTurnControl extends AbstractTurnControl { private IConnectionControl connectionControl; private Event1 stateUpdateEvent = new Event1(); /** * Creates new network turn control * * @param connectionControl * the current connection control */ public NetworkTurnControl(IConnectionControl connectionControl) { this.connectionControl = connectionControl; } /** * The state update event is emitted when the state is sent into the network * * @return the event */ public IEvent1 getStateUpdateEvent() { return stateUpdateEvent; } @Override public void doStartTurn() { connections.add(connectionControl.getTableUpdateEvent().add( new IListener1() { @Override public void handle(ITable table) { view.getTablePanel().setStoneSets(table); } })); connections.add(connectionControl.getTurnEndEvent().add( new IListener2() { @Override public void handle(IRoundState state, InvalidTurnInfo invalidTurnInfo) { endOfTurn(state, invalidTurnInfo); } })); connections.add(connectionControl.getRedealEvent().add(new IListener() { @Override public void handle() { redeal(); } })); timer.startTimer(); } private void endOfTurn(IRoundState roundState, InvalidTurnInfo invalidTurnInfo) { cleanUp(); endOfTurnEvent.emit(roundState, invalidTurnInfo); } private void redeal() { cleanUp(); redealEvent.emit(); } @Override protected void timeOut() { } }