Simplified ConnectionControl
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@454 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
5aa115f4db
commit
fbf5cc3572
1 changed files with 112 additions and 203 deletions
|
@ -74,8 +74,17 @@ class ConnectionControl {
|
||||||
void disconnect() {
|
void disconnect() {
|
||||||
connectedEvent = new Event();
|
connectedEvent = new Event();
|
||||||
connectionFailedEvent = new Event();
|
connectionFailedEvent = new Event();
|
||||||
new Thread(new DisconnectRunner()).start();
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (ConnectionControl.this) {
|
||||||
|
if (connection != null) {
|
||||||
|
connection.disconnect();
|
||||||
|
connection = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
IEvent getConnectedEvent() {
|
IEvent getConnectedEvent() {
|
||||||
|
@ -119,9 +128,20 @@ class ConnectionControl {
|
||||||
void withdrawGame() {
|
void withdrawGame() {
|
||||||
offeredGame = null;
|
offeredGame = null;
|
||||||
currentGame = null;
|
currentGame = null;
|
||||||
new Thread(new SendGameWithdrawRunner(currentGame.getGameID())).start();
|
final UUID uuid = currentGame.getGameID();
|
||||||
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "game_withdrawal");
|
||||||
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
GameData getCurrentGame() {
|
GameData getCurrentGame() {
|
||||||
return currentGame;
|
return currentGame;
|
||||||
}
|
}
|
||||||
|
@ -130,26 +150,101 @@ class ConnectionControl {
|
||||||
this.currentGame = game;
|
this.currentGame = game;
|
||||||
}
|
}
|
||||||
|
|
||||||
void joinGame(GameData game) {
|
void joinGame(final GameData game) {
|
||||||
setCurrentGame(game);
|
setCurrentGame(game);
|
||||||
new Thread(new SendGameJoinRunner(currentGame.getGameID())).start();
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "game_join");
|
||||||
|
extension.setValue("uuid", game.getGameID().toString());
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void leaveGame() {
|
void leaveGame() {
|
||||||
new Thread(new SendGameLeaveRunner(currentGame.getGameID())).start();
|
final UUID uuid = currentGame.getGameID();
|
||||||
currentGame = null;
|
currentGame = null;
|
||||||
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "game_leave");
|
||||||
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ackJoinGame(String recipient, boolean ack) {
|
void ackJoinGame(final String recipient, final boolean ack) {
|
||||||
new Thread(new SendGameJoinAckRunner(currentGame.getGameID(), recipient, ack)).start();
|
final UUID uuid = currentGame.getGameID();
|
||||||
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "game_join_ack");
|
||||||
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
extension.setValue("ack", Boolean.toString(ack));
|
||||||
|
|
||||||
|
Message message = createMessage(extension);
|
||||||
|
message.setType(Message.Type.normal);
|
||||||
|
message.setTo(muc.getRoom() + "/" + recipient);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void changeColor(final Color color) {
|
||||||
|
final UUID uuid = currentGame.getGameID();
|
||||||
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "change_color");
|
||||||
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
extension.setValue("color", Base64.encodeObject(color, Base64.GZIP));
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendGameOffer() {
|
private void sendGameOffer() {
|
||||||
new Thread(new SendGameOfferRunner(offeredGame)).start();
|
final GameData data = offeredGame;
|
||||||
}
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
private void sendChangeColor(Color color) {
|
extension.setValue("messageType", "game_offer");
|
||||||
new Thread(new SendChangeColorRunner(color)).start();
|
extension.setValue("uuid", data.getGameID().toString());
|
||||||
|
extension.setValue("gameSettings", Base64.encodeObject(
|
||||||
|
data.getGameSettings(), Base64.GZIP));
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void requestGames() {
|
||||||
|
new Thread(new SendRunner() {
|
||||||
|
@Override
|
||||||
|
public Message send() {
|
||||||
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
|
||||||
|
extension.setValue("messageType", "game_request");
|
||||||
|
|
||||||
|
return createMessage(extension);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void emitLater(final Event event) {
|
private static void emitLater(final Event event) {
|
||||||
|
@ -222,75 +317,6 @@ class ConnectionControl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Message createGameOfferMessage(GameData data) {
|
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_offer");
|
|
||||||
extension.setValue("uuid", data.getGameID().toString());
|
|
||||||
extension.setValue("gameSettings",
|
|
||||||
Base64.encodeObject(data.getGameSettings(), Base64.GZIP));
|
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Message createGameWithdrawMessage(UUID uuid) {
|
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_withdrawal");
|
|
||||||
extension.setValue("uuid", uuid.toString());
|
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Message createGameJoinMessage(UUID uuid) {
|
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_join");
|
|
||||||
extension.setValue("uuid", uuid.toString());
|
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Message createGameLeaveMessage(UUID uuid) {
|
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_leave");
|
|
||||||
extension.setValue("uuid", uuid.toString());
|
|
||||||
|
|
||||||
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();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_join_ack");
|
|
||||||
extension.setValue("uuid", uuid.toString());
|
|
||||||
extension.setValue("ack", Boolean.toString(ack));
|
|
||||||
|
|
||||||
Message message = createMessage(extension);
|
|
||||||
message.setType(Message.Type.normal);
|
|
||||||
message.setTo(muc.getRoom() + "/" + recipient);
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Message createGameRequestMessage() {
|
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_request");
|
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ConnectRunner implements Runnable {
|
private class ConnectRunner implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -356,137 +382,20 @@ class ConnectionControl {
|
||||||
|
|
||||||
emitLater(connectedEvent);
|
emitLater(connectedEvent);
|
||||||
|
|
||||||
new Thread(new SendGameRequestRunner()).start();
|
requestGames();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SendGameOfferRunner implements Runnable {
|
private abstract class SendRunner implements Runnable {
|
||||||
private GameData data;
|
|
||||||
|
|
||||||
public SendGameOfferRunner(GameData data) {
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
synchronized (ConnectionControl.this) {
|
synchronized (ConnectionControl.this) {
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
connection.sendPacket(createGameOfferMessage(data));
|
connection.sendPacket(send());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private class SendGameWithdrawRunner implements Runnable {
|
abstract public Message send();
|
||||||
private UUID uuid;
|
|
||||||
|
|
||||||
public SendGameWithdrawRunner(UUID uuid) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.sendPacket(createGameWithdrawMessage(uuid));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class SendGameRequestRunner implements Runnable {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.sendPacket(createGameRequestMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class SendGameJoinRunner implements Runnable {
|
|
||||||
private UUID uuid;
|
|
||||||
|
|
||||||
public SendGameJoinRunner(UUID uuid) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.sendPacket(createGameJoinMessage(uuid));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
public SendGameLeaveRunner(UUID uuid) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.sendPacket(createGameLeaveMessage(uuid));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class SendGameJoinAckRunner implements Runnable {
|
|
||||||
private UUID uuid;
|
|
||||||
private String recipient;
|
|
||||||
private boolean ack;
|
|
||||||
|
|
||||||
public SendGameJoinAckRunner(UUID uuid, String recipient, boolean ack) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.recipient = recipient;
|
|
||||||
this.ack = ack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.sendPacket(createGameAckMessage(uuid, recipient,
|
|
||||||
ack));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DisconnectRunner implements Runnable {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (ConnectionControl.this) {
|
|
||||||
if (connection != null) {
|
|
||||||
connection.disconnect();
|
|
||||||
connection = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue