summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jrummikub/control/network/ConnectionControl.java37
-rw-r--r--src/jrummikub/control/network/GameJoinControl.java37
-rw-r--r--src/jrummikub/control/network/NetworkSettingsControl.java27
-rw-r--r--src/jrummikub/model/GameSettings.java18
4 files changed, 94 insertions, 25 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java
index 6cd3fc0..1844922 100644
--- a/src/jrummikub/control/network/ConnectionControl.java
+++ b/src/jrummikub/control/network/ConnectionControl.java
@@ -136,6 +136,10 @@ class ConnectionControl {
new Thread(new SendGameOfferRunner(offeredGame)).start();
}
+ private void sendChangeColor(Color color) {
+ new Thread(new SendChangeColorRunner(color)).start();
+ }
+
private static void emitLater(final Event event) {
SwingUtilities.invokeLater(new Runnable() {
@Override
@@ -160,8 +164,8 @@ class ConnectionControl {
.getExtension(ELEMENT_NAME, NAMESPACE);
if (((Message) packet).getType() == Message.Type.error) {
- System.err.println("Received error message from '" + packet.getFrom()
- + "'");
+ System.err.println("Received error message from '"
+ + packet.getFrom() + "'");
return;
}
@@ -172,27 +176,31 @@ class ConnectionControl {
if (messageType.equals("game_offer")) {
UUID uuid = UUID.fromString(extension.getValue("uuid"));
- GameSettings settings = (GameSettings) Base64.decodeToObject(extension
- .getValue("gameSettings"));
+ GameSettings settings = (GameSettings) Base64
+ .decodeToObject(extension.getValue("gameSettings"));
GameData gameData = new GameData(uuid, settings, sender);
gameOfferEvent.emit(gameData);
} else if (messageType.equals("game_withdrawal")) {
- gameWithdrawalEvent.emit(UUID.fromString(extension.getValue("uuid")));
+ gameWithdrawalEvent.emit(UUID
+ .fromString(extension.getValue("uuid")));
} else if (messageType.equals("game_request")) {
if (offeredGame != null) {
sendGameOffer();
}
} else if (messageType.equals("game_join")) {
- gameJoinEvent.emit(UUID.fromString(extension.getValue("uuid")), sender);
+ gameJoinEvent.emit(UUID.fromString(extension.getValue("uuid")),
+ sender);
} else if (messageType.equals("game_leave")) {
- gameLeaveEvent.emit(UUID.fromString(extension.getValue("uuid")), sender);
+ gameLeaveEvent.emit(UUID.fromString(extension.getValue("uuid")),
+ sender);
} else if (messageType.equals("game_join_ack")) {
gameJoinAckEvent.emit(UUID.fromString(extension.getValue("uuid")),
Boolean.valueOf(extension.getValue("ack")));
} else if (messageType.equals("changeColor")) {
changeColorEvent.emit(UUID.fromString(extension.getValue("uuid")),
- sender, (Color) Base64.decodeToObject(extension.getValue("color")));
+ sender, (Color) Base64.decodeToObject(extension
+ .getValue("color")));
} else {
System.err.println("Received unrecognized message of type '"
+ messageType + "'");
@@ -204,8 +212,8 @@ class ConnectionControl {
extension.setValue("messageType", "game_offer");
extension.setValue("uuid", data.getGameID().toString());
- extension.setValue("gameSettings",
- Base64.encodeObject(data.getGameSettings(), Base64.GZIP));
+ extension.setValue("gameSettings", Base64.encodeObject(data
+ .getGameSettings(), Base64.GZIP));
return createMessage(extension);
}
@@ -246,7 +254,8 @@ class ConnectionControl {
return createMessage(extension);
}
- private Message createGameAckMessage(UUID uuid, String recipient, boolean ack) {
+ private Message createGameAckMessage(UUID uuid, String recipient,
+ boolean ack) {
DefaultPacketExtension extension = createJRummikubExtension();
extension.setValue("messageType", "game_join_ack");
@@ -317,7 +326,8 @@ class ConnectionControl {
break; // Join was successful, break the loop
} catch (XMPPException e) {
XMPPError error = e.getXMPPError();
- if (error.getType() == Type.CANCEL && error.getCode() == 409) {
+ if (error.getType() == Type.CANCEL
+ && error.getCode() == 409) {
// There was a conflict, try again with another
// nickname
nickname += "_";
@@ -446,7 +456,8 @@ class ConnectionControl {
public void run() {
synchronized (ConnectionControl.this) {
if (connection != null) {
- connection.sendPacket(createGameAckMessage(uuid, recipient, ack));
+ connection.sendPacket(createGameAckMessage(uuid, recipient,
+ ack));
}
}
}
diff --git a/src/jrummikub/control/network/GameJoinControl.java b/src/jrummikub/control/network/GameJoinControl.java
index 55f584d..fbc18c6 100644
--- a/src/jrummikub/control/network/GameJoinControl.java
+++ b/src/jrummikub/control/network/GameJoinControl.java
@@ -6,28 +6,35 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.UUID;
import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings;
import jrummikub.model.PlayerSettings.Type;
import jrummikub.util.Connection;
+import jrummikub.util.Event;
import jrummikub.util.GameData;
+import jrummikub.util.IListener;
import jrummikub.util.IListener1;
+import jrummikub.util.IListener2;
+import jrummikub.util.IListener3;
import jrummikub.view.ISettingsPanel;
-import jrummikub.view.ISettingsPanel.SettingsMode;
import jrummikub.view.IView;
+import jrummikub.view.ISettingsPanel.SettingsMode;
public class GameJoinControl {
private List<Connection> connections = new ArrayList<Connection>();
private GameData gameData;
private ConnectionControl connectionControl;
private IView view;
+ private Event backEvent = new Event();
public GameJoinControl(final ConnectionControl connectionControl,
final GameData gameData, final IView view) {
this.connectionControl = connectionControl;
this.gameData = gameData;
this.view = view;
+
view.getSettingsPanel().setSettingsMode(SettingsMode.NETWORK_JOIN);
view.getSettingsPanel().enableAddPlayerButton(false);
@@ -48,13 +55,29 @@ public class GameJoinControl {
}
}
}));
+ connections.add(view.getSettingsPanel().getBackEvent().add(new IListener() {
+ @Override
+ public void handle() {
+ //TODO mit game offer control und game data reden (spieler werden nich wieder entfernt)
+
+ abort();
+ }
+ }));
+ connections.add(view.getSettingsPanel().getChangePlayerColorEvent().add(new IListener2<Integer, Color>() {
+ @Override
+ public void handle(Integer playerNumber, Color color) {
+ // TODO Auto-generated method stub
+
+
+ }
+ }));
}
private void updateSettingsPanel(GameSettings settings) {
view.getSettingsPanel().setGameSettings(settings);
- Set<Color> colors = new HashSet<Color>(
- Arrays.asList(ISettingsPanel.PLAYER_COLORS));
+ Set<Color> colors = new HashSet<Color>(Arrays
+ .asList(ISettingsPanel.PLAYER_COLORS));
for (PlayerSettings player : settings.getPlayerList()) {
colors.remove(player.getColor());
@@ -78,11 +101,15 @@ public class GameJoinControl {
view.showSettingsPanel(true);
}
+ /**
+ * Aborts joining and goes back to game list
+ */
public void abort() {
- // TODO Implement abort
-
+ view.showSettingsPanel(false);
+ view.showGameListPanel(true);
for (Connection c : connections) {
c.remove();
}
+
}
}
diff --git a/src/jrummikub/control/network/NetworkSettingsControl.java b/src/jrummikub/control/network/NetworkSettingsControl.java
index 447bf08..d9871d9 100644
--- a/src/jrummikub/control/network/NetworkSettingsControl.java
+++ b/src/jrummikub/control/network/NetworkSettingsControl.java
@@ -48,16 +48,16 @@ public class NetworkSettingsControl extends AbstractSettingsControl {
addListeners();
- connections.add(view.getSettingsPanel().getOfferGameEvent()
- .add(new IListener() {
+ connections.add(view.getSettingsPanel().getOfferGameEvent().add(
+ new IListener() {
@Override
public void handle() {
offerGame();
}
}));
- connections.add(view.getSettingsPanel().getBackEvent()
- .add(new IListener() {
+ connections.add(view.getSettingsPanel().getBackEvent().add(
+ new IListener() {
@Override
public void handle() {
abort();
@@ -66,15 +66,27 @@ public class NetworkSettingsControl extends AbstractSettingsControl {
}));
}
+ /**
+ * The game offer event is emitted when a player wants to offer a new
+ * network game
+ *
+ * @return the event
+ */
public Event1<GameSettings> getOfferGameEvent() {
return offerGameEvent;
}
+ /**
+ * The get back event is emitted when the player wants to go back to the
+ * previous settings panel
+ *
+ * @return the event
+ */
public Event getBackEvent() {
return backEvent;
}
-
- private void offerGame(){
+
+ private void offerGame() {
if (!checkSettings()) {
return;
}
@@ -84,7 +96,8 @@ public class NetworkSettingsControl extends AbstractSettingsControl {
@Override
protected void update() {
- view.getSettingsPanel()
+ view
+ .getSettingsPanel()
.enableAddPlayerButton(
settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length);
diff --git a/src/jrummikub/model/GameSettings.java b/src/jrummikub/model/GameSettings.java
index 2a2b45d..7713e85 100644
--- a/src/jrummikub/model/GameSettings.java
+++ b/src/jrummikub/model/GameSettings.java
@@ -9,6 +9,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import jrummikub.model.PlayerSettings.Type;
+
/**
* The overall game settings
*/
@@ -229,4 +231,20 @@ public class GameSettings implements Serializable {
public void setNumberOfStonesDealt(int number) {
numberOfStonesDealt = number;
}
+
+ /**
+ * Check if there is only one human player
+ *
+ * @return one human player
+ */
+ public boolean oneHuman() {
+ int humans = 0;
+ for (PlayerSettings s : players) {
+ if (s.getType() == Type.HUMAN) {
+ humans++;
+ }
+ }
+ return (humans == 1);
+
+ }
}