package jrummikub.control.network; import java.util.List; import java.util.UUID; import jrummikub.model.GameSettings; import jrummikub.model.PlayerSettings; import jrummikub.model.PlayerSettings.Type; import jrummikub.util.GameData; import jrummikub.util.IListener1; import jrummikub.view.ISettingsPanel.SettingsMode; import jrummikub.view.IView; /** * Control for network game host */ public class GameOfferControl extends AbstractGameBeginControl { /** * Creates new game offer control * * @param connectionControl * for events (listening and handling) * @param settings * the game settings for player list, colors, names * @param view * the view */ public GameOfferControl(final IConnectionControl connectionControl, final GameSettings settings, final IView view) { super(connectionControl, view, new GameData(UUID.randomUUID(), settings), SettingsMode.NETWORK_OFFER); connections.add(connectionControl.getGameJoinEvent().add( new IListener1() { @Override public void handle(String sender) { for (PlayerSettings player : settings.getPlayerList()) { if (player.getType() == Type.VACANT) { player.setName(sender); player.setType(Type.NETWORK); updateSettingsPanel(); connectionControl.ackJoinGame(sender, true); connectionControl.offerGame(gameData); return; } } connectionControl.ackJoinGame(sender, false); } })); connections.add(connectionControl.getGameLeaveEvent().add( new IListener1() { @Override public void handle(String sender) { List players = gameData .getGameSettings().getPlayerList(); for (PlayerSettings s : players) { if (s.getName().equals(sender) && s.getType() == Type.NETWORK) { s.setType(Type.VACANT); s.setName("Offen"); break; } } updateSettingsPanel(); connectionControl.offerGame(gameData); } })); } /** * sends the game offer and starts the settings panel for host using network * offer type */ public void startGameOffer() { connectionControl.offerGame(gameData); view.showSettingsPanel(true); } @Override protected void goBack() { abort(); connectionControl.withdrawGame(); backEvent.emit(); } }