diff options
Diffstat (limited to 'src/jrummikub/control/network/GameOfferControl.java')
-rw-r--r-- | src/jrummikub/control/network/GameOfferControl.java | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/jrummikub/control/network/GameOfferControl.java b/src/jrummikub/control/network/GameOfferControl.java index 0db5110..7cd289f 100644 --- a/src/jrummikub/control/network/GameOfferControl.java +++ b/src/jrummikub/control/network/GameOfferControl.java @@ -1,22 +1,27 @@ package jrummikub.control.network; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import jrummikub.model.GameSettings; +import jrummikub.model.PlayerSettings; +import jrummikub.model.PlayerSettings.Type; +import jrummikub.util.Connection; import jrummikub.util.GameData; +import jrummikub.util.IListener2; import jrummikub.view.ISettingsPanel.SettingsMode; import jrummikub.view.IView; public class GameOfferControl { + private List<Connection> connections = new ArrayList<Connection>(); private GameData gameData; private ConnectionControl connectionControl; - private GameSettings settings; private IView view; - public GameOfferControl(ConnectionControl connectionControl, - GameSettings settings, IView view) { + public GameOfferControl(final ConnectionControl connectionControl, + final GameSettings settings, final IView view) { this.connectionControl = connectionControl; - this.settings = settings; this.view = view; gameData = new GameData(UUID.randomUUID(), settings); @@ -24,6 +29,29 @@ public class GameOfferControl { view.getSettingsPanel().setSettingsMode(SettingsMode.NETWORK_OFFER); view.getSettingsPanel().enableAddPlayerButton(false); view.getSettingsPanel().setGameSettings(settings); + + connections.add(connectionControl.getGameJoinEvent().add( + new IListener2<UUID, String>() { + @Override + public void handle(UUID uuid, String sender) { + if (!uuid.equals(gameData.getGameID())) { + return; + } + + for (PlayerSettings player : settings.getPlayerList()) { + if (player.getType() == Type.VACANT) { + player.setName(sender); + player.setType(Type.NETWORK); + view.getSettingsPanel().setGameSettings(settings); + connectionControl.ackJoinGame(uuid, sender, true); + connectionControl.offerGame(gameData); + return; + } + } + + connectionControl.ackJoinGame(uuid, sender, false); + } + })); } public void startGameOffer() { |