
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@479 72836036-5685-4462-b002-a69064685172
98 lines
2.4 KiB
Java
98 lines
2.4 KiB
Java
package jrummikub.control.network;
|
|
|
|
import java.util.UUID;
|
|
|
|
import jrummikub.model.GameSettings;
|
|
import jrummikub.model.PlayerSettings;
|
|
import jrummikub.model.PlayerSettings.Type;
|
|
import jrummikub.util.GameData;
|
|
import jrummikub.util.IListener;
|
|
import jrummikub.util.IListener1;
|
|
import jrummikub.view.ISettingsPanel.SettingsMode;
|
|
import jrummikub.view.IView;
|
|
|
|
/**
|
|
* Control for joining a network game
|
|
*/
|
|
public class GameJoinControl extends AbstractGameBeginControl {
|
|
|
|
/**
|
|
* Creates new game join control
|
|
*
|
|
* @param connectionControl
|
|
* the current connection control for events and messages
|
|
* @param gameData
|
|
* the game data for settings, game id
|
|
* @param view
|
|
* the view
|
|
*/
|
|
public GameJoinControl(final IConnectionControl connectionControl,
|
|
final GameData gameData, final IView view) {
|
|
super(connectionControl, view, gameData, SettingsMode.NETWORK_JOIN);
|
|
|
|
fixGameSettings(gameData.getGameSettings());
|
|
updateSettingsPanel();
|
|
|
|
connections.add(connectionControl.getGameOfferEvent().add(
|
|
new IListener1<GameData>() {
|
|
@Override
|
|
public void handle(GameData data) {
|
|
if (data.getGameID().equals(gameData.getGameID())) {
|
|
GameSettings settings = data.getGameSettings();
|
|
|
|
fixGameSettings(settings);
|
|
|
|
gameData.setGameSettings(settings);
|
|
|
|
updateSettingsPanel();
|
|
}
|
|
}
|
|
}));
|
|
|
|
connections.add(connectionControl.getGameWithdrawalEvent().add(
|
|
new IListener1<UUID>() {
|
|
@Override
|
|
public void handle(UUID uuid) {
|
|
if (uuid.equals(gameData.getGameID())) {
|
|
abort();
|
|
backEvent.emit();
|
|
}
|
|
}
|
|
}));
|
|
|
|
connections.add(connectionControl.getGameStartEvent().add(new IListener() {
|
|
@Override
|
|
public void handle() {
|
|
startGame();
|
|
}
|
|
}));
|
|
}
|
|
|
|
private void fixGameSettings(GameSettings settings) {
|
|
for (PlayerSettings player : settings.getPlayerList()) {
|
|
if (player.getType() == Type.HUMAN) {
|
|
player.setType(Type.NETWORK);
|
|
} else if (player.getType() == Type.NETWORK
|
|
&& player.getName().equals(connectionControl.getNickname())) {
|
|
player.setType(Type.HUMAN);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Starts the join control and sets the settings panel in game join mode
|
|
*/
|
|
public void startGameJoin() {
|
|
view.showSettingsPanel(true);
|
|
}
|
|
|
|
/**
|
|
* Aborts joining and goes back to game list
|
|
*/
|
|
@Override
|
|
protected void goBack() {
|
|
abort();
|
|
connectionControl.leaveGame();
|
|
backEvent.emit();
|
|
}
|
|
}
|