Merge branch 'master' into Network_Upgrade

Conflicts:
	Mage.Client/src/main/java/mage/client/MageFrame.java
	Mage.Client/src/main/java/mage/client/chat/ChatPanel.java
	Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java
	Mage.Client/src/main/java/mage/client/dialog/UserRequestDialog.java
	Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java
	Mage.Client/src/main/java/mage/client/table/TablesPanel.java
	Mage.Common/src/mage/remote/SessionImpl.java
	Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
This commit is contained in:
betasteward 2015-06-12 08:56:26 -04:00
commit 38da157f8c
807 changed files with 13691 additions and 4039 deletions

View file

@ -157,7 +157,7 @@ public class Session {
if (user == null) {
user = UserManager.getInstance().findUser("Admin");
}
user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, null));
user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, false, null, "world.png"));
if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) {
logger.info("Error connecting Admin!");
}
@ -169,7 +169,10 @@ public class Session {
if (user != null) {
UserData userData = user.getUserData();
if (userData == null) {
userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId(), userDataView.isShowAbilityPickerForced(), userDataView.allowRequestShowHandCards(), userDataView.getUserSkipPrioritySteps());
userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId(),
userDataView.isShowAbilityPickerForced(), userDataView.allowRequestShowHandCards(),
userDataView.confirmEmptyManaPool(), userDataView.getUserSkipPrioritySteps(),
userDataView.getFlagName());
user.setUserData(userData);
} else {
if (userDataView.getAvatarId() == 51) { // Update special avatar if first avatar is selected
@ -179,6 +182,7 @@ public class Session {
userData.setShowAbilityPickerForced(userDataView.isShowAbilityPickerForced());
userData.setAllowRequestShowHandCards(userDataView.allowRequestShowHandCards());
userData.setUserSkipPrioritySteps(userDataView.getUserSkipPrioritySteps());
userData.setConfirmEmptyManaPool(userDataView.confirmEmptyManaPool());
}
return true;
}

View file

@ -43,6 +43,7 @@ import mage.constants.RangeOfInfluence;
import mage.constants.TableState;
import mage.game.Game;
import mage.game.GameException;
import mage.game.GameOptions;
import mage.game.Seat;
import mage.game.Table;
import mage.game.draft.Draft;
@ -570,7 +571,10 @@ public class TableController {
try {
match.startGame();
table.initGame();
GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId);
GameOptions gameOptions = new GameOptions();
gameOptions.rollbackTurnsAllowed = match.getOptions().isRollbackTurnsAllowed();
match.getGame().setGameOptions(gameOptions);
GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId, gameOptions);
String creator = null;
StringBuilder opponent = new StringBuilder();
for (Entry<UUID, UUID> entry: userPlayerMap.entrySet()) { // no AI players

View file

@ -64,6 +64,7 @@ import mage.constants.PlayerAction;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.GameException;
import mage.game.GameOptions;
import mage.game.Table;
import mage.game.events.Listener;
import mage.game.events.PlayerQueryEvent;
@ -118,15 +119,23 @@ public class GameController implements GameCallback {
private UUID choosingPlayerId;
private Future<?> gameFuture;
private boolean useTimeout = true;
private GameOptions gameOptions;
private UUID userReqestingRollback;
private int turnsToRollback;
private int requestsOpen;
public GameController(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId) {
public GameController(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions) {
gameSessionId = UUID.randomUUID();
this.userPlayerMap = userPlayerMap;
chatId = ChatManager.getInstance().createChatSession("Game " + game.getId());
this.userReqestingRollback = null;
this.game = game;
this.game.setSaveGame(ConfigSettings.getInstance().isSaveGameActivated());
this.tableId = tableId;
this.choosingPlayerId = choosingPlayerId;
this.gameOptions = gameOptions;
for (Player player: game.getPlayers().values()) {
if (!player.isHuman()) {
useTimeout = false; // no timeout for AI players because of beeing idle
@ -477,14 +486,70 @@ public class GameController implements GameCallback {
case UNDO:
game.undo(getPlayerId(userId));
break;
case ROLLBACK_TURNS: // basic request of a player to rollback
if (data instanceof Integer) {
turnsToRollback = (Integer) data;
if (game.canRollbackTurns(turnsToRollback)) {
requestsOpen = requestPermissionToRollback(userId, turnsToRollback);
if (requestsOpen == 0) {
game.rollbackTurns(turnsToRollback);
turnsToRollback = -1;
requestsOpen = -1;
} else {
userReqestingRollback = userId;
}
} else {
UUID playerId = getPlayerId(userId);
if (playerId != null) {
Player player = game.getPlayer(playerId);
if (player != null) {
game.informPlayer(player, "That turn is not available for rollback.");
}
}
}
}
break;
case ADD_PERMISSION_TO_ROLLBACK_TURN:
if (userReqestingRollback != null && requestsOpen > 0 && !userId.equals(userReqestingRollback)) {
requestsOpen--;
if (requestsOpen == 0) {
game.rollbackTurns(turnsToRollback);
turnsToRollback = -1;
userReqestingRollback = null;
requestsOpen = -1;
}
}
break;
case DENY_PERMISSON_TO_ROLLBACK_TURN: // one player has denied - so cancel the request
{
UUID playerId = getPlayerId(userId);
if (playerId != null) {
Player player = game.getPlayer(playerId);
if (player != null) {
if (userReqestingRollback != null && requestsOpen > 0 && !userId.equals(userReqestingRollback)) {
turnsToRollback = -1;
userReqestingRollback = null;
requestsOpen = -1;
game.informPlayers("Rollback request denied by " + player.getLogName());
}
}
}
}
break;
case CONCEDE:
game.concede(getPlayerId(userId));
break;
case MANA_AUTO_PAYMENT_OFF:
game.setManaPoolMode(getPlayerId(userId), false);
game.setManaPaymentMode(getPlayerId(userId), false);
break;
case MANA_AUTO_PAYMENT_ON:
game.setManaPoolMode(getPlayerId(userId), true);
game.setManaPaymentMode(getPlayerId(userId), true);
break;
case MANA_AUTO_PAYMENT_RESTRICTED_OFF:
game.setManaPaymentModeRestricted(getPlayerId(userId), false);
break;
case MANA_AUTO_PAYMENT_RESTRICTED_ON:
game.setManaPaymentModeRestricted(getPlayerId(userId), true);
break;
case ADD_PERMISSION_TO_SEE_HAND_CARDS:
if (data instanceof UUID) {
@ -516,6 +581,23 @@ public class GameController implements GameCallback {
}
}
private int requestPermissionToRollback(UUID userIdRequester, int numberTurns) {
int requests = 0;
for (Player player: game.getState().getPlayers().values()) {
User requestedUser = getUserByPlayerId(player.getId());
if (player.isInGame() && player.isHuman() &&
requestedUser != null &&
!requestedUser.getId().equals(userIdRequester)) {
requests++;
GameSessionPlayer gameSession = gameSessions.get(player.getId());
if (gameSession != null) {
gameSession.requestPermissionToRollbackTurn(userIdRequester, numberTurns);
}
}
}
return requests;
}
private void requestPermissionToSeeHandCards(UUID userIdRequester, UUID userIdGranter) {
Player grantingPlayer = game.getPlayer(userIdGranter);
if (grantingPlayer != null) {

View file

@ -34,6 +34,7 @@ import mage.cards.decks.DeckCardLists;
import mage.constants.ManaType;
import mage.constants.PlayerAction;
import mage.game.Game;
import mage.game.GameOptions;
import mage.view.GameView;
/**
@ -51,8 +52,8 @@ public class GameManager {
private final ConcurrentHashMap<UUID, GameController> gameControllers = new ConcurrentHashMap<>();
public UUID createGameSession(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId) {
GameController gameController = new GameController(game, userPlayerMap, tableId, choosingPlayerId);
public UUID createGameSession(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions) {
GameController gameController = new GameController(game, userPlayerMap, tableId, choosingPlayerId, gameOptions);
gameControllers.put(game.getId(), gameController);
return gameController.getSessionId();
}

View file

@ -170,6 +170,34 @@ public class GameSessionPlayer extends GameSessionWatcher {
}
}
public void requestPermissionToRollbackTurn(UUID requestingUserId, int numberTurns) {
if (!killed) {
User requestingUser = UserManager.getInstance().getUser(requestingUserId);
User requestedUser = UserManager.getInstance().getUser(userId);
if (requestedUser != null && requestingUser != null) {
String message;
switch(numberTurns) {
case 0:
message = "Allow rollback to the start of the current turn?";
break;
case 1:
message = "Allow rollback to the start of the previous turn?";
break;
default:
message = "Allow to rollback "+numberTurns+ " turns?";
}
UserRequestMessage userRequestMessage = new UserRequestMessage(
"Request by " + requestedUser.getName(), message
, PlayerAction.REQUEST_PERMISSION_TO_ROLLBACK_TURN);
userRequestMessage.setRelatedUser(requestingUserId, requestingUser.getName());
userRequestMessage.setGameId(game.getId());
userRequestMessage.setButton1("Accept", PlayerAction.ADD_PERMISSION_TO_ROLLBACK_TURN);
userRequestMessage.setButton2("Deny", PlayerAction.DENY_PERMISSON_TO_ROLLBACK_TURN);
requestedUser.fireCallback(new ClientCallback("userRequestDialog", game.getId(), userRequestMessage));
}
}
}
public void requestPermissionToSeeHandCards(UUID watcherId) {
if (!killed) {
User watcher = UserManager.getInstance().getUser(watcherId);
@ -237,7 +265,7 @@ public class GameSessionPlayer extends GameSessionWatcher {
Map<String, SimpleCardsView> handCards = new HashMap<>();
for (UUID controlledPlayerId : player.getPlayersUnderYourControl()) {
Player opponent = game.getPlayer(controlledPlayerId);
handCards.put(opponent.getName(), new SimpleCardsView(opponent.getHand().getCards(game)));
handCards.put(opponent.getName(), new SimpleCardsView(opponent.getHand().getCards(game), true));
}
gameView.setOpponentHands(handCards);
}

View file

@ -142,7 +142,7 @@ public class GameSessionWatcher {
Map<String, SimpleCardsView> handCards = new HashMap<>();
for (Player player: game.getPlayers().values()) {
if (player.hasUserPermissionToSeeHand(userId)) {
handCards.put(player.getName(), new SimpleCardsView(player.getHand().getCards(game)));
handCards.put(player.getName(), new SimpleCardsView(player.getHand().getCards(game), true));
gameView.setWatchedHands(handCards);
}
}

View file

@ -37,6 +37,7 @@ import org.apache.log4j.Logger;
/**
*
* @author BetaSteward_at_googlemail.com
* @param <T>
*/
public class GameWorker<T> implements Callable {

View file

@ -123,10 +123,17 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
for (User user : UserManager.getInstance().getUsers()) {
Session session = SessionManager.getInstance().getSession(user.getSessionId());
try {
<<<<<<< HEAD
users.add(new UsersView(user.getName(), user.getInfo(), user.getGameInfo(), session.getPingInfo()));
} catch (Exception ex) {
logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex);
users.add(new UsersView(user.getName(), user.getInfo(), "[exception]", session.getPingInfo()));
=======
users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), user.getGameInfo(), user.getPingInfo()));
} catch (Exception ex) {
logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex);
users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), "[exception]", user.getPingInfo()));
>>>>>>> master
}
}