summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/network/NetworkControl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control/network/NetworkControl.java')
-rw-r--r--src/jrummikub/control/network/NetworkControl.java38
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();
}