summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/network/ConnectionControl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control/network/ConnectionControl.java')
-rw-r--r--src/jrummikub/control/network/ConnectionControl.java69
1 files changed, 68 insertions, 1 deletions
diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java
index 0a36ebd..acccbdc 100644
--- a/src/jrummikub/control/network/ConnectionControl.java
+++ b/src/jrummikub/control/network/ConnectionControl.java
@@ -6,6 +6,8 @@ import java.util.UUID;
import javax.swing.SwingUtilities;
import jrummikub.model.GameSettings;
+import jrummikub.model.IRoundState;
+import jrummikub.model.ITable;
import jrummikub.util.Event;
import jrummikub.util.Event1;
import jrummikub.util.Event2;
@@ -58,6 +60,10 @@ public class ConnectionControl implements IConnectionControl {
private Event gameStartEvent = new Event();
+ private Event1<ITable> tableUpdateEvent = new Event1<ITable>();
+ private Event1<ITable> turnEndEvent = new Event1<ITable>();
+ private Event1<IRoundState> turnStartEvent = new Event1<IRoundState>();
+
private GameData currentGame;
private volatile GameData offeredGame;
@@ -145,6 +151,21 @@ public class ConnectionControl implements IConnectionControl {
}
@Override
+ public IEvent1<ITable> getTableUpdateEvent() {
+ return tableUpdateEvent;
+ }
+
+ @Override
+ public IEvent1<ITable> getTurnEndEvent() {
+ return turnEndEvent;
+ }
+
+ @Override
+ public IEvent1<IRoundState> getTurnStartEvent() {
+ return turnStartEvent;
+ }
+
+ @Override
public void offerGame(GameData data) {
offeredGame = data;
currentGame = data;
@@ -235,7 +256,6 @@ public class ConnectionControl implements IConnectionControl {
Base64.encodeObject(color, Base64.GZIP));
}
});
-
}
@Override
@@ -248,7 +268,45 @@ public class ConnectionControl implements IConnectionControl {
extension.setValue("uuid", uuid.toString());
}
});
+ }
+
+ @Override
+ public void updateTable(final ITable table) {
+ final UUID uuid = currentGame.getGameID();
+ run(new SendRunner() {
+ @Override
+ protected void addData(DefaultPacketExtension extension) {
+ extension.setValue("messageType", "table_update");
+ extension.setValue("uuid", uuid.toString());
+ extension.setValue("table", Base64.encodeObject(table, Base64.GZIP));
+ }
+ });
+ }
+
+ @Override
+ public void endTurn(final ITable table) {
+ final UUID uuid = currentGame.getGameID();
+ run(new SendRunner() {
+ @Override
+ protected void addData(DefaultPacketExtension extension) {
+ extension.setValue("messageType", "turn_end");
+ extension.setValue("uuid", uuid.toString());
+ extension.setValue("table", Base64.encodeObject(table, Base64.GZIP));
+ }
+ });
+ }
+ @Override
+ public void startTurn(final IRoundState state) {
+ final UUID uuid = currentGame.getGameID();
+ run(new SendRunner() {
+ @Override
+ protected void addData(DefaultPacketExtension extension) {
+ extension.setValue("messageType", "turn_start");
+ extension.setValue("uuid", uuid.toString());
+ extension.setValue("state", Base64.encodeObject(state, Base64.GZIP));
+ }
+ });
}
private void sendGameOffer() {
@@ -348,6 +406,15 @@ public class ConnectionControl implements IConnectionControl {
(Color) Base64.decodeToObject(extension.getValue("color")));
} else if (messageType.equals("game_start")) {
gameStartEvent.emit();
+ } else if (messageType.equals("table_update")) {
+ tableUpdateEvent.emit((ITable) Base64.decodeToObject(extension
+ .getValue("table")));
+ } else if (messageType.equals("turn_end")) {
+ turnEndEvent.emit((ITable) Base64.decodeToObject(extension
+ .getValue("table")));
+ } else if (messageType.equals("turn_start")) {
+ turnStartEvent.emit((IRoundState) Base64.decodeToObject(extension
+ .getValue("state")));
} else {
System.err.println("Received unrecognized message of type '"
+ messageType + "'");