Refactor ConnectionControl
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@475 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
71f1f20d35
commit
7396a4ee85
2 changed files with 57 additions and 72 deletions
|
@ -68,14 +68,14 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connect() {
|
public void connect() {
|
||||||
new Thread(new ConnectRunner()).start();
|
run(new ConnectRunner());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disconnect() {
|
public void disconnect() {
|
||||||
connectedEvent = new Event();
|
connectedEvent = new Event();
|
||||||
connectionFailedEvent = new Event();
|
connectionFailedEvent = new Event();
|
||||||
new Thread(new Runnable() {
|
run(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
synchronized (ConnectionControl.this) {
|
synchronized (ConnectionControl.this) {
|
||||||
|
@ -85,7 +85,7 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -140,17 +140,13 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
offeredGame = null;
|
offeredGame = null;
|
||||||
final UUID uuid = currentGame.getGameID();
|
final UUID uuid = currentGame.getGameID();
|
||||||
currentGame = null;
|
currentGame = null;
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_withdrawal");
|
extension.setValue("messageType", "game_withdrawal");
|
||||||
extension.setValue("uuid", uuid.toString());
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -163,104 +159,86 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
this.currentGame = game;
|
this.currentGame = game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void run(Runnable runner) {
|
||||||
|
new Thread(runner).start();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void joinGame(final GameData game) {
|
public void joinGame(final GameData game) {
|
||||||
setCurrentGame(game);
|
setCurrentGame(game);
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_join");
|
extension.setValue("messageType", "game_join");
|
||||||
extension.setValue("uuid", game.getGameID().toString());
|
extension.setValue("uuid", game.getGameID().toString());
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void leaveGame() {
|
public void leaveGame() {
|
||||||
final UUID uuid = currentGame.getGameID();
|
final UUID uuid = currentGame.getGameID();
|
||||||
currentGame = null;
|
currentGame = null;
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_leave");
|
extension.setValue("messageType", "game_leave");
|
||||||
extension.setValue("uuid", uuid.toString());
|
extension.setValue("uuid", uuid.toString());
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ackJoinGame(final String recipient, final boolean ack) {
|
public void ackJoinGame(final String recipient, final boolean ack) {
|
||||||
final UUID uuid = currentGame.getGameID();
|
final UUID uuid = currentGame.getGameID();
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_join_ack");
|
extension.setValue("messageType", "game_join_ack");
|
||||||
extension.setValue("uuid", uuid.toString());
|
extension.setValue("uuid", uuid.toString());
|
||||||
extension.setValue("ack", Boolean.toString(ack));
|
extension.setValue("ack", Boolean.toString(ack));
|
||||||
|
}
|
||||||
|
|
||||||
Message message = createMessage(extension);
|
@Override
|
||||||
|
protected void modifyMessage(Message message) {
|
||||||
message.setType(Message.Type.normal);
|
message.setType(Message.Type.normal);
|
||||||
message.setTo(muc.getRoom() + "/" + recipient);
|
message.setTo(muc.getRoom() + "/" + recipient);
|
||||||
return message;
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changeColor(final Color color) {
|
public void changeColor(final Color color) {
|
||||||
final UUID uuid = currentGame.getGameID();
|
final UUID uuid = currentGame.getGameID();
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "change_color");
|
extension.setValue("messageType", "change_color");
|
||||||
extension.setValue("uuid", uuid.toString());
|
extension.setValue("uuid", uuid.toString());
|
||||||
extension.setValue("color",
|
extension.setValue("color", Base64.encodeObject(color, Base64.GZIP));
|
||||||
Base64.encodeObject(color, Base64.GZIP));
|
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendGameOffer() {
|
private void sendGameOffer() {
|
||||||
final GameData data = offeredGame;
|
final GameData data = offeredGame;
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_offer");
|
extension.setValue("messageType", "game_offer");
|
||||||
extension.setValue("uuid", data.getGameID().toString());
|
extension.setValue("uuid", data.getGameID().toString());
|
||||||
extension.setValue("gameSettings", Base64.encodeObject(
|
extension.setValue("gameSettings",
|
||||||
data.getGameSettings(), Base64.GZIP));
|
Base64.encodeObject(data.getGameSettings(), Base64.GZIP));
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void requestGames() {
|
private void requestGames() {
|
||||||
new Thread(new SendRunner() {
|
run(new SendRunner() {
|
||||||
@Override
|
@Override
|
||||||
public Message send() {
|
protected void addData(DefaultPacketExtension extension) {
|
||||||
DefaultPacketExtension extension = createJRummikubExtension();
|
|
||||||
|
|
||||||
extension.setValue("messageType", "game_request");
|
extension.setValue("messageType", "game_request");
|
||||||
|
|
||||||
return createMessage(extension);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -289,8 +267,8 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
.getExtension(ELEMENT_NAME, NAMESPACE);
|
.getExtension(ELEMENT_NAME, NAMESPACE);
|
||||||
|
|
||||||
if (((Message) packet).getType() == Message.Type.error) {
|
if (((Message) packet).getType() == Message.Type.error) {
|
||||||
System.err.println("Received error message from '"
|
System.err.println("Received error message from '" + packet.getFrom()
|
||||||
+ packet.getFrom() + "'");
|
+ "'");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,14 +284,13 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
String sender, String messageType) {
|
String sender, String messageType) {
|
||||||
if (messageType.equals("game_offer")) {
|
if (messageType.equals("game_offer")) {
|
||||||
UUID uuid = UUID.fromString(extension.getValue("uuid"));
|
UUID uuid = UUID.fromString(extension.getValue("uuid"));
|
||||||
GameSettings settings = (GameSettings) Base64
|
GameSettings settings = (GameSettings) Base64.decodeToObject(extension
|
||||||
.decodeToObject(extension.getValue("gameSettings"));
|
.getValue("gameSettings"));
|
||||||
|
|
||||||
GameData gameData = new GameData(uuid, settings, sender);
|
GameData gameData = new GameData(uuid, settings, sender);
|
||||||
gameOfferEvent.emit(gameData);
|
gameOfferEvent.emit(gameData);
|
||||||
} else if (messageType.equals("game_withdrawal")) {
|
} else if (messageType.equals("game_withdrawal")) {
|
||||||
gameWithdrawalEvent
|
gameWithdrawalEvent.emit(UUID.fromString(extension.getValue("uuid")));
|
||||||
.emit(UUID.fromString(extension.getValue("uuid")));
|
|
||||||
} else if (messageType.equals("game_request")) {
|
} else if (messageType.equals("game_request")) {
|
||||||
if (offeredGame != null) {
|
if (offeredGame != null) {
|
||||||
sendGameOffer();
|
sendGameOffer();
|
||||||
|
@ -334,11 +311,10 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
} else if (messageType.equals("game_leave")) {
|
} else if (messageType.equals("game_leave")) {
|
||||||
gameLeaveEvent.emit(sender);
|
gameLeaveEvent.emit(sender);
|
||||||
} else if (messageType.equals("game_join_ack")) {
|
} else if (messageType.equals("game_join_ack")) {
|
||||||
gameJoinAckEvent
|
gameJoinAckEvent.emit(Boolean.valueOf(extension.getValue("ack")));
|
||||||
.emit(Boolean.valueOf(extension.getValue("ack")));
|
|
||||||
} else if (messageType.equals("change_color")) {
|
} else if (messageType.equals("change_color")) {
|
||||||
changeColorEvent.emit(sender, (Color) Base64
|
changeColorEvent.emit(sender,
|
||||||
.decodeToObject(extension.getValue("color")));
|
(Color) Base64.decodeToObject(extension.getValue("color")));
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Received unrecognized message of type '"
|
System.err.println("Received unrecognized message of type '"
|
||||||
+ messageType + "'");
|
+ messageType + "'");
|
||||||
|
@ -395,8 +371,7 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
break; // Join was successful, break the loop
|
break; // Join was successful, break the loop
|
||||||
} catch (XMPPException e) {
|
} catch (XMPPException e) {
|
||||||
XMPPError error = e.getXMPPError();
|
XMPPError error = e.getXMPPError();
|
||||||
if (error.getType() == Type.CANCEL
|
if (error.getType() == Type.CANCEL && error.getCode() == 409) {
|
||||||
&& error.getCode() == 409) {
|
|
||||||
// There was a conflict, try again with another
|
// There was a conflict, try again with another
|
||||||
// nickname
|
// nickname
|
||||||
nickname += "_";
|
nickname += "_";
|
||||||
|
@ -419,11 +394,18 @@ public class ConnectionControl implements IConnectionControl {
|
||||||
public void run() {
|
public void run() {
|
||||||
synchronized (ConnectionControl.this) {
|
synchronized (ConnectionControl.this) {
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
connection.sendPacket(send());
|
DefaultPacketExtension extension = createJRummikubExtension();
|
||||||
|
addData(extension);
|
||||||
|
Message message = createMessage(extension);
|
||||||
|
modifyMessage(message);
|
||||||
|
connection.sendPacket(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public Message send();
|
abstract protected void addData(DefaultPacketExtension extension);
|
||||||
|
|
||||||
|
protected void modifyMessage(Message message) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,16 +19,19 @@ public class GameJoinControl extends AbstractGameBeginControl {
|
||||||
* Creates new game join control
|
* Creates new game join control
|
||||||
*
|
*
|
||||||
* @param connectionControl
|
* @param connectionControl
|
||||||
* the current connection control for events and messages
|
* the current connection control for events and messages
|
||||||
* @param gameData
|
* @param gameData
|
||||||
* the game data for settings, game id
|
* the game data for settings, game id
|
||||||
* @param view
|
* @param view
|
||||||
* the view
|
* the view
|
||||||
*/
|
*/
|
||||||
public GameJoinControl(final IConnectionControl connectionControl,
|
public GameJoinControl(final IConnectionControl connectionControl,
|
||||||
final GameData gameData, final IView view) {
|
final GameData gameData, final IView view) {
|
||||||
super(connectionControl, view, gameData, SettingsMode.NETWORK_JOIN);
|
super(connectionControl, view, gameData, SettingsMode.NETWORK_JOIN);
|
||||||
|
|
||||||
|
fixGameSettings(gameData.getGameSettings());
|
||||||
|
updateSettingsPanel();
|
||||||
|
|
||||||
connections.add(connectionControl.getGameOfferEvent().add(
|
connections.add(connectionControl.getGameOfferEvent().add(
|
||||||
new IListener1<GameData>() {
|
new IListener1<GameData>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
Reference in a new issue