summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/network/ConnectionControl.java
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-06-15 19:02:13 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-06-15 19:02:13 +0200
commit1b9c7c47783a0872ca3bedfad6fb120f611d354b (patch)
treecb7568ba1c9c5822008fd2eafa93e4d98a5013b5 /src/jrummikub/control/network/ConnectionControl.java
parent3ffad8597290f91d21c2a2ba7657bbbc16ab1582 (diff)
downloadJRummikub-1b9c7c47783a0872ca3bedfad6fb120f611d354b.tar
JRummikub-1b9c7c47783a0872ca3bedfad6fb120f611d354b.zip
Start implementing color changing over network
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@442 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/network/ConnectionControl.java')
-rw-r--r--src/jrummikub/control/network/ConnectionControl.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java
index d6bb5fe..6cd3fc0 100644
--- a/src/jrummikub/control/network/ConnectionControl.java
+++ b/src/jrummikub/control/network/ConnectionControl.java
@@ -1,5 +1,6 @@
package jrummikub.control.network;
+import java.awt.Color;
import java.util.UUID;
import javax.swing.SwingUtilities;
@@ -8,10 +9,12 @@ import jrummikub.model.GameSettings;
import jrummikub.util.Event;
import jrummikub.util.Event1;
import jrummikub.util.Event2;
+import jrummikub.util.Event3;
import jrummikub.util.GameData;
import jrummikub.util.IEvent;
import jrummikub.util.IEvent1;
import jrummikub.util.IEvent2;
+import jrummikub.util.IEvent3;
import jrummikub.util.LoginData;
import org.jivesoftware.smack.Connection;
@@ -50,6 +53,8 @@ class ConnectionControl {
private Event2<UUID, Boolean> gameJoinAckEvent = new Event2<UUID, Boolean>();
+ private Event3<UUID, String, Color> changeColorEvent = new Event3<UUID, String, Color>();
+
private volatile GameData offeredGame;
ConnectionControl(LoginData loginData) {
@@ -99,6 +104,10 @@ class ConnectionControl {
return gameJoinAckEvent;
}
+ IEvent3<UUID, String, Color> getChangeColorEvent() {
+ return changeColorEvent;
+ }
+
void offerGame(GameData data) {
offeredGame = data;
@@ -181,6 +190,9 @@ class ConnectionControl {
} 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 + "'");
@@ -225,6 +237,15 @@ class ConnectionControl {
return createMessage(extension);
}
+ private Message createChangeColorMessage(Color color) {
+ DefaultPacketExtension extension = createJRummikubExtension();
+
+ extension.setValue("messageType", "change_color");
+ extension.setValue("color", Base64.encodeObject(color, Base64.GZIP));
+
+ return createMessage(extension);
+ }
+
private Message createGameAckMessage(UUID uuid, String recipient, boolean ack) {
DefaultPacketExtension extension = createJRummikubExtension();
@@ -376,6 +397,23 @@ class ConnectionControl {
}
}
+ private class SendChangeColorRunner implements Runnable {
+ private Color color;
+
+ public SendChangeColorRunner(Color color) {
+ this.color = color;
+ }
+
+ @Override
+ public void run() {
+ synchronized (ConnectionControl.this) {
+ if (connection != null) {
+ connection.sendPacket(createChangeColorMessage(color));
+ }
+ }
+ }
+ }
+
private class SendGameLeaveRunner implements Runnable {
private UUID uuid;