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() {
|
||||
connectedEvent = 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() {
|
||||
|
@ -119,7 +128,18 @@ class ConnectionControl {
|
|||
void withdrawGame() {
|
||||
offeredGame = 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() {
|
||||
|
@ -130,26 +150,101 @@ class ConnectionControl {
|
|||
this.currentGame = game;
|
||||
}
|
||||
|
||||
void joinGame(GameData game) {
|
||||
void joinGame(final GameData 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() {
|
||||
new Thread(new SendGameLeaveRunner(currentGame.getGameID())).start();
|
||||
final UUID uuid = currentGame.getGameID();
|
||||
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) {
|
||||
new Thread(new SendGameJoinAckRunner(currentGame.getGameID(), recipient, ack)).start();
|
||||
void ackJoinGame(final String recipient, final boolean ack) {
|
||||
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() {
|
||||
new Thread(new SendGameOfferRunner(offeredGame)).start();
|
||||
final GameData data = offeredGame;
|
||||
new Thread(new SendRunner() {
|
||||
@Override
|
||||
public Message send() {
|
||||
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);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void sendChangeColor(Color color) {
|
||||
new Thread(new SendChangeColorRunner(color)).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) {
|
||||
|
@ -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 {
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -356,137 +382,20 @@ class ConnectionControl {
|
|||
|
||||
emitLater(connectedEvent);
|
||||
|
||||
new Thread(new SendGameRequestRunner()).start();
|
||||
requestGames();
|
||||
}
|
||||
}
|
||||
|
||||
private class SendGameOfferRunner implements Runnable {
|
||||
private GameData data;
|
||||
|
||||
public SendGameOfferRunner(GameData data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
private abstract class SendRunner implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
synchronized (ConnectionControl.this) {
|
||||
if (connection != null) {
|
||||
connection.sendPacket(createGameOfferMessage(data));
|
||||
}
|
||||
connection.sendPacket(send());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SendGameWithdrawRunner implements Runnable {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
abstract public Message send();
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue