diff options
Diffstat (limited to 'src/jrummikub/control/network/NetworkControl.java')
-rw-r--r-- | src/jrummikub/control/network/NetworkControl.java | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/jrummikub/control/network/NetworkControl.java b/src/jrummikub/control/network/NetworkControl.java index 7435839..dd4a949 100644 --- a/src/jrummikub/control/network/NetworkControl.java +++ b/src/jrummikub/control/network/NetworkControl.java @@ -13,6 +13,7 @@ import jrummikub.util.GameData; import jrummikub.util.IEvent; import jrummikub.util.IListener; import jrummikub.util.IListener1; +import jrummikub.util.IListener2; import jrummikub.util.LoginData; import jrummikub.view.IView; @@ -27,6 +28,7 @@ public class NetworkControl { private NetworkSettingsControl settingsControl; private GameOfferControl gameOfferControl; + private GameJoinControl gameJoinControl; private Map<UUID, GameData> gameMap = new HashMap<UUID, GameData>(); @@ -47,9 +49,8 @@ public class NetworkControl { connections.add(view.getGameListPanel().getJoinEvent() .add(new IListener1<GameData>() { @Override - public void handle(GameData value) { - // TODO Auto-generated method stub - + public void handle(GameData gameData) { + join(gameData); } })); @@ -71,6 +72,11 @@ public class NetworkControl { })); } + private void join(GameData gameData) { + view.showGameListPanel(false); + connectionControl.joinGame(gameData.getGameID()); + } + /** * Adds the listeners for connection control events * @@ -126,6 +132,29 @@ public class NetworkControl { } } })); + connections.add(connectionControl.getGameJoinAckEvent().add( + new IListener2<UUID, Boolean>() { + @Override + public void handle(UUID uuid, Boolean ack) { + if (ack) { + createGameJoinControl(uuid); + } else { + // TODO Error message + System.err.println("Join NACKed"); + view.showGameListPanel(true); + } + } + })); + } + + private void createGameJoinControl(UUID uuid) { + if (gameJoinControl != null) { + return; + } + + GameData gameData = gameMap.get(uuid); + gameJoinControl = new GameJoinControl(connectionControl, gameData, view); + gameJoinControl.startGameJoin(); } /** @@ -150,6 +179,9 @@ public class NetworkControl { if (gameOfferControl != null) { gameOfferControl.abort(); } + if (gameJoinControl != null) { + gameJoinControl.abort(); + } connectionControl.disconnect(); } |