summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/network/ConnectionControl.java
diff options
context:
space:
mode:
authorJannis Harder <harder@informatik.uni-luebeck.de>2011-06-18 00:40:41 +0200
committerJannis Harder <harder@informatik.uni-luebeck.de>2011-06-18 00:40:41 +0200
commit4db4ec03d78382648edaa25f03aa66ef88a03c7c (patch)
tree9c1af7f802093927bd7338227911cc1907ebe205 /src/jrummikub/control/network/ConnectionControl.java
parent9fe061f21c0ed880efed860b95610b66114f68e1 (diff)
downloadJRummikub-4db4ec03d78382648edaa25f03aa66ef88a03c7c.tar
JRummikub-4db4ec03d78382648edaa25f03aa66ef88a03c7c.zip
Moved filtering for UUIDs into ConnectionControl
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@452 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/network/ConnectionControl.java')
-rw-r--r--src/jrummikub/control/network/ConnectionControl.java89
1 files changed, 52 insertions, 37 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java
index 1844922..2d97558 100644
--- a/src/jrummikub/control/network/ConnectionControl.java
+++ b/src/jrummikub/control/network/ConnectionControl.java
@@ -48,12 +48,14 @@ class ConnectionControl {
private Event1<GameData> gameOfferEvent = new Event1<GameData>();
private Event1<UUID> gameWithdrawalEvent = new Event1<UUID>();
- private Event2<UUID, String> gameJoinEvent = new Event2<UUID, String>();
- private Event2<UUID, String> gameLeaveEvent = new Event2<UUID, String>();
+ private Event1<String> gameJoinEvent = new Event1<String>();
+ private Event1<String> gameLeaveEvent = new Event1<String>();
- private Event2<UUID, Boolean> gameJoinAckEvent = new Event2<UUID, Boolean>();
+ private Event1<Boolean> gameJoinAckEvent = new Event1<Boolean>();
- private Event3<UUID, String, Color> changeColorEvent = new Event3<UUID, String, Color>();
+ private Event2<String, Color> changeColorEvent = new Event2<String, Color>();
+
+ private GameData currentGame;
private volatile GameData offeredGame;
@@ -92,44 +94,54 @@ class ConnectionControl {
return gameWithdrawalEvent;
}
- IEvent2<UUID, String> getGameJoinEvent() {
+ IEvent1<String> getGameJoinEvent() {
return gameJoinEvent;
}
- IEvent2<UUID, String> getGameLeaveEvent() {
+ IEvent1<String> getGameLeaveEvent() {
return gameLeaveEvent;
}
- IEvent2<UUID, Boolean> getGameJoinAckEvent() {
+ IEvent1<Boolean> getGameJoinAckEvent() {
return gameJoinAckEvent;
}
- IEvent3<UUID, String, Color> getChangeColorEvent() {
+ IEvent2<String, Color> getChangeColorEvent() {
return changeColorEvent;
}
void offerGame(GameData data) {
offeredGame = data;
-
+ currentGame = data;
sendGameOffer();
}
- void withdrawGame(UUID uuid) {
+ void withdrawGame() {
offeredGame = null;
+ currentGame = null;
+ new Thread(new SendGameWithdrawRunner(currentGame.getGameID())).start();
+ }
+
+ GameData getCurrentGame() {
+ return currentGame;
+ }
- new Thread(new SendGameWithdrawRunner(uuid)).start();
+ void setCurrentGame(GameData game) {
+ this.currentGame = game;
}
- void joinGame(UUID uuid) {
- new Thread(new SendGameJoinRunner(uuid)).start();
+ void joinGame(GameData game) {
+ setCurrentGame(game);
+ new Thread(new SendGameJoinRunner(currentGame.getGameID())).start();
}
- void leaveGame(UUID uuid) {
- new Thread(new SendGameLeaveRunner(uuid)).start();
+ void leaveGame() {
+ currentGame = null;
+ new Thread(new SendGameLeaveRunner(currentGame.getGameID())).start();
}
- void ackJoinGame(UUID uuid, String recipient, boolean ack) {
- new Thread(new SendGameJoinAckRunner(uuid, recipient, ack)).start();
+ void ackJoinGame(String recipient, boolean ack) {
+ new Thread(new SendGameJoinAckRunner(currentGame.getGameID(), recipient, ack)).start();
}
private void sendGameOffer() {
@@ -182,28 +194,31 @@ class ConnectionControl {
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);
- } else if (messageType.equals("game_leave")) {
- 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")));
- } else {
- System.err.println("Received unrecognized message of type '"
- + messageType + "'");
+ } else if (currentGame != null) {
+ UUID uuid = UUID.fromString(extension.getValue("uuid"));
+ if (!currentGame.getGameID().equals(uuid)) {
+ return;
+ }
+ if (messageType.equals("game_join")) {
+ gameJoinEvent.emit(sender);
+ } else if (messageType.equals("game_leave")) {
+ gameLeaveEvent.emit(sender);
+ } else if (messageType.equals("game_join_ack")) {
+ gameJoinAckEvent
+ .emit(Boolean.valueOf(extension.getValue("ack")));
+ } else if (messageType.equals("changeColor")) {
+ changeColorEvent.emit(sender, (Color) Base64
+ .decodeToObject(extension.getValue("color")));
+ } else {
+ System.err.println("Received unrecognized message of type '"
+ + messageType + "'");
+ }
}
}
@@ -212,8 +227,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);
}