* Changed logging level back to info, changed level of a lot of messages to debug from info. Added check that certain AI players can't join a table with no appropriate format.

This commit is contained in:
LevelX2 2013-10-09 15:22:40 +02:00
parent 7a4469fd80
commit d34779fa68
26 changed files with 146 additions and 69 deletions

View file

@ -339,7 +339,7 @@ public class NewTableDialog extends MageDialog {
for (TablePlayerPanel player: players) { for (TablePlayerPanel player: players) {
if (!player.getPlayerType().equals("Human")) { if (!player.getPlayerType().equals("Human")) {
if (!player.joinTable(roomId, table.getTableId())) { if (!player.joinTable(roomId, table.getTableId())) {
JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE); // error message must be send by the server
session.removeTable(roomId, table.getTableId()); session.removeTable(roomId, table.getTableId());
table = null; table = null;
return; return;

View file

@ -113,7 +113,7 @@
<EmptySpace min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="jLabel5" min="-2" max="-2" attributes="0"/> <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="pnlPacks" pref="67" max="32767" attributes="0"/> <Component id="pnlPacks" pref="69" max="32767" attributes="0"/>
<EmptySpace min="-2" pref="11" max="-2" attributes="0"/> <EmptySpace min="-2" pref="11" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0"> <Group type="102" attributes="0">
@ -124,7 +124,7 @@
</Group> </Group>
<Group type="102" attributes="0"> <Group type="102" attributes="0">
<Group type="103" groupAlignment="1" attributes="0"> <Group type="103" groupAlignment="1" attributes="0">
<Component id="spnNumPlayers" pref="23" max="32767" attributes="1"/> <Component id="spnNumPlayers" pref="25" max="32767" attributes="1"/>
<Component id="pnlDraftOptions" max="32767" attributes="1"/> <Component id="pnlDraftOptions" max="32767" attributes="1"/>
</Group> </Group>
<EmptySpace min="-2" pref="14" max="-2" attributes="0"/> <EmptySpace min="-2" pref="14" max="-2" attributes="0"/>

View file

@ -401,7 +401,7 @@ public class NewTournamentDialog extends MageDialog {
for (TournamentPlayerPanel player: players) { for (TournamentPlayerPanel player: players) {
if (!player.getPlayerType().toString().equals("Human")) { if (!player.getPlayerType().toString().equals("Human")) {
if (!player.joinTournamentTable(roomId, table.getTableId())) { if (!player.joinTournamentTable(roomId, table.getTableId())) {
JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining tournament.", "Error", JOptionPane.ERROR_MESSAGE); // error message must be send by sever
session.removeTable(roomId, table.getTableId()); session.removeTable(roomId, table.getTableId());
table = null; table = null;
return; return;

View file

@ -30,6 +30,8 @@ package mage.player.ai;
import mage.constants.RangeOfInfluence; import mage.constants.RangeOfInfluence;
import mage.game.Game; import mage.game.Game;
import mage.game.Table;
import mage.game.tournament.TournamentType;
import mage.players.Player; import mage.players.Player;
/** /**
@ -65,4 +67,15 @@ public class ComputerDraftPlayer extends ComputerPlayer<ComputerDraftPlayer> imp
game.concede(playerId); game.concede(playerId);
return true; return true;
} }
@Override
public boolean canJoinTable(Table table) {
if (table.isTournament()) {
TournamentType tournamentType = table.getTournament().getTournamentType();
if(tournamentType != null && tournamentType.isDraft()) {
return true;
}
}
return false;
}
} }

View file

@ -1,5 +1,6 @@
#default levels #default levels
log4j.rootLogger=debug, console, logfile log4j.rootLogger=debug, console, logfile
log4j.logger.com.j256.ormlite=warn
#console log #console log
log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console=org.apache.log4j.ConsoleAppender

View file

@ -1,6 +1,6 @@
#default levels #default levels
log4j.rootLogger=warn, console, logfile log4j.rootLogger=info, console, logfile
log4j.logger.com.j256.ormlite=warn
#console log #console log
log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout=org.apache.log4j.PatternLayout

View file

@ -61,7 +61,7 @@ public class ChatSession {
String userName = user.getName(); String userName = user.getName();
clients.put(userId, userName); clients.put(userId, userName);
broadcast(userName, " has joined", MessageColor.BLUE); broadcast(userName, " has joined", MessageColor.BLUE);
logger.info(userName + " joined chat " + chatId); logger.debug(userName + " joined chat " + chatId);
} }
} }
@ -81,7 +81,7 @@ public class ChatSession {
message = " has left chat"; message = " has left chat";
} }
broadcast(userName, message, MessageColor.BLUE); broadcast(userName, message, MessageColor.BLUE);
logger.info(userName + message + " " + chatId); logger.debug(userName + message + " " + chatId);
} }
} }

View file

@ -28,6 +28,11 @@
package mage.server; package mage.server;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import mage.MageException; import mage.MageException;
import mage.cards.decks.DeckCardLists; import mage.cards.decks.DeckCardLists;
import mage.cards.repository.CardInfo; import mage.cards.repository.CardInfo;
@ -44,26 +49,37 @@ import mage.interfaces.ServerState;
import mage.interfaces.callback.ClientCallback; import mage.interfaces.callback.ClientCallback;
import mage.remote.MageVersionException; import mage.remote.MageVersionException;
import mage.server.draft.DraftManager; import mage.server.draft.DraftManager;
import mage.server.game.*; import mage.server.game.DeckValidatorFactory;
import mage.server.game.GameFactory;
import mage.server.game.GameManager;
import mage.server.game.GamesRoom;
import mage.server.game.GamesRoomManager;
import mage.server.game.PlayerFactory;
import mage.server.game.ReplayManager;
import mage.server.services.LogKeys; import mage.server.services.LogKeys;
import mage.server.services.impl.FeedbackServiceImpl; import mage.server.services.impl.FeedbackServiceImpl;
import mage.server.services.impl.LogServiceImpl; import mage.server.services.impl.LogServiceImpl;
import mage.server.tournament.TournamentFactory; import mage.server.tournament.TournamentFactory;
import mage.server.tournament.TournamentManager; import mage.server.tournament.TournamentManager;
import mage.server.util.ConfigSettings;
import mage.server.util.ServerMessagesUtil; import mage.server.util.ServerMessagesUtil;
import mage.server.util.ThreadExecutor; import mage.server.util.ThreadExecutor;
import mage.utils.*; import mage.utils.ActionWithBooleanResult;
import mage.view.*; import mage.utils.ActionWithNullNegativeResult;
import mage.utils.ActionWithTableViewResult;
import mage.utils.CompressUtil;
import mage.utils.MageVersion;
import mage.view.ChatMessage;
import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageColor;
import mage.view.DraftPickView;
import mage.view.GameView;
import mage.view.MatchView;
import mage.view.TableView;
import mage.view.TournamentView;
import mage.view.UserDataView;
import mage.view.UserView;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import mage.server.util.ConfigSettings;
/** /**
* *
* @author BetaSteward_at_googlemail.com, noxx * @author BetaSteward_at_googlemail.com, noxx
@ -133,7 +149,7 @@ public class MageServerImpl implements MageServer {
public TableView execute() throws MageException { public TableView execute() throws MageException {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTable(userId, options); TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTable(userId, options);
logger.info("Table " + table.getTableId() + " created"); logger.debug("Table " + table.getTableId() + " created");
LogServiceImpl.instance.log(LogKeys.KEY_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); LogServiceImpl.instance.log(LogKeys.KEY_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString());
return table; return table;
} }
@ -166,7 +182,7 @@ public class MageServerImpl implements MageServer {
} }
} }
TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options);
logger.info("Tournament table " + table.getTableId() + " created"); logger.debug("Tournament table " + table.getTableId() + " created");
LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString());
return table; return table;
} catch (Exception ex) { } catch (Exception ex) {
@ -195,7 +211,7 @@ public class MageServerImpl implements MageServer {
public Boolean execute() throws MageException { public Boolean execute() throws MageException {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList); boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList);
logger.info("Session " + sessionId + " joined table " + tableId); logger.debug("Session " + sessionId + " joined table " + tableId);
return ret; return ret;
} }
}); });
@ -208,7 +224,7 @@ public class MageServerImpl implements MageServer {
public Boolean execute() throws MageException { public Boolean execute() throws MageException {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTournamentTable(userId, tableId, name, playerType, skill); boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTournamentTable(userId, tableId, name, playerType, skill);
logger.info("Session " + sessionId + " joined table " + tableId); logger.debug("Session " + sessionId + " joined table " + tableId);
return ret; return ret;
} }
}); });
@ -221,7 +237,7 @@ public class MageServerImpl implements MageServer {
public Boolean execute() throws MageException { public Boolean execute() throws MageException {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList); boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList);
logger.info("Session " + sessionId + " submitted deck"); logger.debug("Session " + sessionId + " submitted deck");
return ret; return ret;
} }
}); });
@ -318,7 +334,7 @@ public class MageServerImpl implements MageServer {
@Override @Override
public void execute() { public void execute() {
SessionManager.getInstance().disconnect(sessionId, true); SessionManager.getInstance().disconnect(sessionId, true);
logger.info("Client deregistered ..."); logger.debug("Client deregistered ...");
} }
}); });
} }

View file

@ -169,11 +169,11 @@ public class Main {
} }
if (throwable instanceof ClientDisconnectedException) { if (throwable instanceof ClientDisconnectedException) {
SessionManager.getInstance().disconnect(client.getSessionId(), true); SessionManager.getInstance().disconnect(client.getSessionId(), true);
logger.info("client disconnected - " + sessionName); logger.info("Client disconnected - " + sessionName);
} }
else { else {
SessionManager.getInstance().disconnect(client.getSessionId(), false); SessionManager.getInstance().disconnect(client.getSessionId(), false);
logger.info("connection to client lost - " + sessionName); logger.info("Connection to client lost - " + sessionName);
} }
} }
} }
@ -249,7 +249,7 @@ public class Main {
private static Class<?> loadPlugin(Plugin plugin) { private static Class<?> loadPlugin(Plugin plugin) {
try { try {
classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL());
logger.info("Loading plugin: " + plugin.getClassName()); logger.debug("Loading plugin: " + plugin.getClassName());
return Class.forName(plugin.getClassName(), true, classLoader); return Class.forName(plugin.getClassName(), true, classLoader);
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
logger.warn("Plugin not Found:" + plugin.getJar() + " - check plugin folder"); logger.warn("Plugin not Found:" + plugin.getJar() + " - check plugin folder");
@ -262,7 +262,7 @@ public class Main {
private static MatchType loadGameType(GamePlugin plugin) { private static MatchType loadGameType(GamePlugin plugin) {
try { try {
classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL());
logger.info("Loading game type: " + plugin.getClassName()); logger.debug("Loading game type: " + plugin.getClassName());
return (MatchType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance(); return (MatchType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance();
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
logger.warn("Game type not found:" + plugin.getJar() + " - check plugin folder"); logger.warn("Game type not found:" + plugin.getJar() + " - check plugin folder");
@ -275,7 +275,7 @@ public class Main {
private static TournamentType loadTournamentType(GamePlugin plugin) { private static TournamentType loadTournamentType(GamePlugin plugin) {
try { try {
classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL());
logger.info("Loading tournament type: " + plugin.getClassName()); logger.debug("Loading tournament type: " + plugin.getClassName());
return (TournamentType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance(); return (TournamentType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance();
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
logger.warn("Tournament type not found:" + plugin.getJar() + " - check plugin folder"); logger.warn("Tournament type not found:" + plugin.getJar() + " - check plugin folder");

View file

@ -82,7 +82,7 @@ public class Session {
Pattern p = Pattern.compile(ConfigSettings.getInstance().getUserNamePattern(), Pattern.CASE_INSENSITIVE); Pattern p = Pattern.compile(ConfigSettings.getInstance().getUserNamePattern(), Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(userName); Matcher m = p.matcher(userName);
if (m.find()) { if (m.find()) {
throw new MageException("User name includes not allowed characters: use a-z, A-Z and 0-9"); throw new MageException("User name '" + userName + "' includes not allowed characters: use a-z, A-Z and 0-9");
} }
User user = UserManager.getInstance().createUser(userName, host); User user = UserManager.getInstance().createUser(userName, host);
if (user == null) { // user already exists if (user == null) { // user already exists
@ -99,11 +99,11 @@ public class Session {
} }
} }
else { else {
throw new MageException("User name already in use"); throw new MageException("User name " + userName + " already in use");
} }
} }
if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) { if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) {
throw new MageException("Error connecting"); throw new MageException("Error connecting " + userName);
} }
this.userId = user.getId(); this.userId = user.getId();
} }

View file

@ -28,7 +28,6 @@
package mage.server; package mage.server;
import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID; import java.util.UUID;
@ -36,15 +35,14 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import mage.constants.RangeOfInfluence;
import mage.constants.TableState;
import mage.MageException; import mage.MageException;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.cards.decks.DeckCardLists; import mage.cards.decks.DeckCardLists;
import mage.cards.decks.InvalidDeckException; import mage.cards.decks.InvalidDeckException;
import mage.constants.RangeOfInfluence;
import mage.constants.TableState;
import mage.game.GameException; import mage.game.GameException;
import mage.game.GameOptions; import mage.game.GameOptions;
import mage.game.GameState;
import mage.game.Seat; import mage.game.Seat;
import mage.game.Table; import mage.game.Table;
import mage.game.draft.Draft; import mage.game.draft.Draft;
@ -57,18 +55,20 @@ import mage.game.match.MatchPlayer;
import mage.game.tournament.Tournament; import mage.game.tournament.Tournament;
import mage.game.tournament.TournamentOptions; import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentPlayer; import mage.game.tournament.TournamentPlayer;
import mage.interfaces.callback.ClientCallback;
import mage.players.Player; import mage.players.Player;
import mage.server.challenge.ChallengeManager; import mage.server.challenge.ChallengeManager;
import mage.server.draft.DraftManager; import mage.server.draft.DraftManager;
import mage.server.game.*; import mage.server.game.DeckValidatorFactory;
import mage.server.game.GameFactory;
import mage.server.game.GameManager;
import mage.server.game.PlayerFactory;
import mage.server.game.ReplayManager;
import mage.server.services.LogKeys; import mage.server.services.LogKeys;
import mage.server.services.impl.LogServiceImpl; import mage.server.services.impl.LogServiceImpl;
import mage.server.tournament.TournamentFactory; import mage.server.tournament.TournamentFactory;
import mage.server.tournament.TournamentManager; import mage.server.tournament.TournamentManager;
import mage.server.util.ServerMessagesUtil; import mage.server.util.ServerMessagesUtil;
import mage.server.util.ThreadExecutor; import mage.server.util.ThreadExecutor;
import mage.view.GameEndView;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -164,8 +164,12 @@ public class TableController {
logger.fatal(new StringBuilder("couldn't get user ").append(name).append(" for join tornament userId = ").append(userId).toString()); logger.fatal(new StringBuilder("couldn't get user ").append(name).append(" for join tornament userId = ").append(userId).toString());
return false; return false;
} }
if (!player.canJoinTable(table)) {
user.showUserMessage("Join Table", new StringBuilder("A ").append(seat.getPlayerType()).append(" player can't join this table.").toString());
return false;
}
user.addTable(player.getId(), table); user.addTable(player.getId(), table);
logger.info("player joined " + player.getId()); logger.debug("player joined " + player.getId());
//only inform human players and add them to sessionPlayerMap //only inform human players and add them to sessionPlayerMap
if (seat.getPlayer().isHuman()) { if (seat.getPlayer().isHuman()) {
user.joinedTable(table.getRoomId(), table.getId(), true); user.joinedTable(table.getRoomId(), table.getId(), true);
@ -227,10 +231,14 @@ public class TableController {
user.showUserMessage("Join Table",message); user.showUserMessage("Join Table",message);
return false; return false;
} }
if (!player.canJoinTable(table)) {
user.showUserMessage("Join Table", new StringBuilder("A ").append(seat.getPlayerType()).append(" player can't join this table.").toString());
return false;
}
match.addPlayer(player, deck); match.addPlayer(player, deck);
table.joinTable(player, seat); table.joinTable(player, seat);
user.addTable(player.getId(), table); user.addTable(player.getId(), table);
logger.info("player joined " + player.getId()); logger.debug("player joined " + player.getId());
//only inform human players and add them to sessionPlayerMap //only inform human players and add them to sessionPlayerMap
if (seat.getPlayer().isHuman()) { if (seat.getPlayer().isHuman()) {
user.joinedTable(table.getRoomId(), table.getId(), false); user.joinedTable(table.getRoomId(), table.getId(), false);
@ -348,7 +356,7 @@ public class TableController {
player = PlayerFactory.getInstance().createPlayer(playerType, name, options.getRange(), skill); player = PlayerFactory.getInstance().createPlayer(playerType, name, options.getRange(), skill);
} }
if (player != null) { if (player != null) {
logger.info("Player created " + player.getId()); logger.debug("Player created " + player.getId());
} }
return player; return player;
} }

View file

@ -309,7 +309,7 @@ public class TableManager {
} }
private void checkExpired() { private void checkExpired() {
logger.info("Table expire checking..."); logger.debug("Table expire checking...");
Date now = new Date(); Date now = new Date();
List<UUID> toRemove = new ArrayList<UUID>(); List<UUID> toRemove = new ArrayList<UUID>();
@ -318,7 +318,7 @@ public class TableManager {
// remove all not finished tables created more than expire_time ago // remove all not finished tables created more than expire_time ago
long diff = (now.getTime() - table.getCreateTime().getTime()) / EXPIRE_TIME_UNIT_VALUE; long diff = (now.getTime() - table.getCreateTime().getTime()) / EXPIRE_TIME_UNIT_VALUE;
if (diff >= EXPIRE_TIME) { if (diff >= EXPIRE_TIME) {
logger.info("Table expired: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); logger.warn("Table expired: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing...");
toRemove.add(table.getId()); toRemove.add(table.getId());
} }
// remove immediately non tournament tables with no human players // remove immediately non tournament tables with no human players
@ -326,7 +326,7 @@ public class TableManager {
boolean canBeRemoved = true; boolean canBeRemoved = true;
for (MatchPlayer matchPlayer :table.getMatch().getPlayers()) { for (MatchPlayer matchPlayer :table.getMatch().getPlayers()) {
Player player = matchPlayer.getPlayer(); Player player = matchPlayer.getPlayer();
if (player != null && player.isHuman()) { if (player != null && player.isHuman() && !player.hasLeft()) {
canBeRemoved = false; canBeRemoved = false;
} }
// tournament sub tables may not be removed as long the tournament is not finished // tournament sub tables may not be removed as long the tournament is not finished
@ -335,7 +335,7 @@ public class TableManager {
} }
} }
if (canBeRemoved) { if (canBeRemoved) {
logger.info("Table with no human player: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); logger.warn("Table with no active human player: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing...");
toRemove.add(table.getId()); toRemove.add(table.getId());
} }
} }

View file

@ -104,7 +104,8 @@ public class UserManager {
if (userId != null) { if (userId != null) {
ChatManager.getInstance().removeUser(userId, User.DisconnectReason.Disconnected); ChatManager.getInstance().removeUser(userId, User.DisconnectReason.Disconnected);
if (users.containsKey(userId)) { if (users.containsKey(userId)) {
logger.info("user disconnected " + userId); User user = users.get(userId);
logger.info(new StringBuilder("User ").append(user.getName()).append("disconnected id:").append(userId).toString());
users.get(userId).setSessionId(""); users.get(userId).setSessionId("");
ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK); ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK);
} }
@ -122,7 +123,7 @@ public class UserManager {
if (users.containsKey(userId)) { if (users.containsKey(userId)) {
logger.info("Remove user " + users.get(userId).getName() + ": " + userId + " Reason: " + reason.toString()); logger.info("Remove user " + users.get(userId).getName() + ": " + userId + " Reason: " + reason.toString());
ChatManager.getInstance().removeUser(userId, reason); ChatManager.getInstance().removeUser(userId, reason);
ChatManager.getInstance().broadcast(userId, "has disconnected", MessageColor.BLACK); ChatManager.getInstance().broadcast(userId, new StringBuilder("has disconnected (").append(reason.toString()).append(")").toString(), MessageColor.BLACK);
users.get(userId).kill(reason); users.get(userId).kill(reason);
users.remove(userId); users.remove(userId);
} }

View file

@ -110,7 +110,7 @@ public class DraftController {
for (DraftPlayer player: draft.getPlayers()) { for (DraftPlayer player: draft.getPlayers()) {
if (!player.getPlayer().isHuman()) { if (!player.getPlayer().isHuman()) {
player.setJoined(); player.setJoined();
logger.info("player " + player.getPlayer().getId() + " has joined draft " + draft.getId()); logger.debug("player " + player.getPlayer().getId() + " has joined draft " + draft.getId());
} }
} }
checkStart(); checkStart();
@ -125,7 +125,7 @@ public class DraftController {
DraftSession draftSession = new DraftSession(draft, userId, playerId); DraftSession draftSession = new DraftSession(draft, userId, playerId);
draftSessions.put(playerId, draftSession); draftSessions.put(playerId, draftSession);
UserManager.getInstance().getUser(userId).addDraft(playerId, draftSession); UserManager.getInstance().getUser(userId).addDraft(playerId, draftSession);
logger.info("User " + UserManager.getInstance().getUser(userId).getName() + " has joined draft " + draft.getId()); logger.debug("User " + UserManager.getInstance().getUser(userId).getName() + " has joined draft " + draft.getId());
draft.getPlayer(playerId).setJoined(); draft.getPlayer(playerId).setJoined();
checkStart(); checkStart();
} }
@ -198,7 +198,7 @@ public class DraftController {
public void timeout(UUID userId) { public void timeout(UUID userId) {
if (userPlayerMap.containsKey(userId)) { if (userPlayerMap.containsKey(userId)) {
draft.autoPick(userPlayerMap.get(userId)); draft.autoPick(userPlayerMap.get(userId));
logger.info("Draft pick timeout - autopick for player: " + userPlayerMap.get(userId)); logger.debug("Draft pick timeout - autopick for player: " + userPlayerMap.get(userId));
} }
} }

View file

@ -63,7 +63,7 @@ public class DeckValidatorFactory {
logger.fatal("DeckValidatorFactory error", ex); logger.fatal("DeckValidatorFactory error", ex);
return null; return null;
} }
logger.info("Deck validator created: " + validator.getName()); logger.debug("Deck validator created: " + validator.getName());
return validator; return validator;
} }

View file

@ -248,7 +248,7 @@ public class GameController implements GameCallback {
@Override @Override
public void execute() throws MageException { public void execute() throws MageException {
game.concede(initPlayerId); game.concede(initPlayerId);
logger.info("Game timeout for player: " + initPlayerId + ". Conceding."); logger.debug("Game timeout for player: " + initPlayerId + ". Conceding.");
} }
}); });
timers.put(playerId, timer); timers.put(playerId, timer);
@ -267,7 +267,7 @@ public class GameController implements GameCallback {
User user = UserManager.getInstance().getUser(userId); User user = UserManager.getInstance().getUser(userId);
gameSession.setUserData(user.getUserData()); gameSession.setUserData(user.getUserData());
user.addGame(playerId, gameSession); user.addGame(playerId, gameSession);
logger.info(new StringBuilder("Player ").append(playerId).append(" has joined game ").append(game.getId()).toString()); logger.debug(new StringBuilder("Player ").append(playerId).append(" has joined game ").append(game.getId()).toString());
ChatManager.getInstance().broadcast(chatId, "", new StringBuilder(game.getPlayer(playerId).getName()).append(" has joined the game").toString(), MessageColor.BLACK); ChatManager.getInstance().broadcast(chatId, "", new StringBuilder(game.getPlayer(playerId).getName()).append(" has joined the game").toString(), MessageColor.BLACK);
checkStart(); checkStart();
} }
@ -694,7 +694,7 @@ public class GameController implements GameCallback {
finally { finally {
output.close(); output.close();
} }
logger.info("Saved game:" + game.getId()); logger.debug("Saved game:" + game.getId());
} }
catch(IOException ex) { catch(IOException ex) {
logger.fatal("Cannot save game.", ex); logger.fatal("Cannot save game.", ex);

View file

@ -70,7 +70,7 @@ public class GameFactory {
logger.fatal("Error creating match - " + gameType, ex); logger.fatal("Error creating match - " + gameType, ex);
return null; return null;
} }
logger.info("Game created: " + gameType); // + game.getId().toString()); logger.debug("Game created: " + gameType); // + game.getId().toString());
return match; return match;
} }

View file

@ -61,7 +61,7 @@ public class PlayerFactory {
if (playerTypeClass != null) { if (playerTypeClass != null) {
con = playerTypeClass.getConstructor(new Class[]{String.class, RangeOfInfluence.class, int.class}); con = playerTypeClass.getConstructor(new Class[]{String.class, RangeOfInfluence.class, int.class});
player = (Player)con.newInstance(new Object[] {name, range, skill}); player = (Player)con.newInstance(new Object[] {name, range, skill});
logger.info("Player created: " + name + "-" + player.getId().toString()); logger.debug("Player created: " + name + "-" + player.getId().toString());
return player; return player;
} }
else { else {

View file

@ -136,7 +136,7 @@ public class TournamentController {
for (TournamentPlayer player: tournament.getPlayers()) { for (TournamentPlayer player: tournament.getPlayers()) {
if (!player.getPlayer().isHuman()) { if (!player.getPlayer().isHuman()) {
player.setJoined(); player.setJoined();
logger.info("player " + player.getPlayer().getId() + " has joined tournament " + tournament.getId()); logger.debug("player " + player.getPlayer().getId() + " has joined tournament " + tournament.getId());
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK); ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK);
} }
} }
@ -150,7 +150,7 @@ public class TournamentController {
UserManager.getInstance().getUser(userId).addTournament(playerId, tournamentSession); UserManager.getInstance().getUser(userId).addTournament(playerId, tournamentSession);
TournamentPlayer player = tournament.getPlayer(playerId); TournamentPlayer player = tournament.getPlayer(playerId);
player.setJoined(); player.setJoined();
logger.info("player " + playerId + " has joined tournament " + tournament.getId()); logger.debug("player " + playerId + " has joined tournament " + tournament.getId());
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK); ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK);
checkStart(); checkStart();
} }

View file

@ -67,6 +67,7 @@ public class TournamentFactory {
con = tournaments.get(tournamentType).getConstructor(new Class[]{TournamentOptions.class}); con = tournaments.get(tournamentType).getConstructor(new Class[]{TournamentOptions.class});
tournament = con.newInstance(new Object[] {options}); tournament = con.newInstance(new Object[] {options});
// transfer set information, create short info string for included sets // transfer set information, create short info string for included sets
tournament.setTournamentType(tournamentTypes.get(tournamentType));
Map<String,Integer> setInfo = new LinkedHashMap<String,Integer>(); Map<String,Integer> setInfo = new LinkedHashMap<String,Integer>();
for (String setCode: options.getLimitedOptions().getSetCodes()) { for (String setCode: options.getLimitedOptions().getSetCodes()) {
tournament.getSets().add(Sets.findSet(setCode)); tournament.getSets().add(Sets.findSet(setCode));
@ -82,7 +83,7 @@ public class TournamentFactory {
logger.fatal("TournamentFactory error ", ex); logger.fatal("TournamentFactory error ", ex);
return null; return null;
} }
logger.info("Tournament created: " + tournamentType); // + game.getId().toString()); logger.debug("Tournament created: " + tournamentType); // + game.getId().toString());
return tournament; return tournament;
} }

View file

@ -1,5 +1,6 @@
#default levels #default levels
log4j.rootLogger=info, console, logfile log4j.rootLogger=info, console, logfile
log4j.logger.com.j256.ormlite=warn
#log4j.logger.mage.player.ai=TRACE #log4j.logger.mage.player.ai=TRACE
#log4j.logger.mage.player.ai.ComputerPlayer6=debug #log4j.logger.mage.player.ai.ComputerPlayer6=debug
#log4j.logger.mage.player.ai.ComputerPlayer7=debug #log4j.logger.mage.player.ai.ComputerPlayer7=debug

View file

@ -77,4 +77,7 @@ public interface Tournament {
// tournament times // tournament times
Date getStartTime(); Date getStartTime();
Date getEndTime(); Date getEndTime();
// tournament type
TournamentType getTournamentType();
void setTournamentType(TournamentType tournamentType);
} }

View file

@ -52,6 +52,7 @@ public abstract class TournamentImpl implements Tournament {
protected static Random rnd = new Random(); protected static Random rnd = new Random();
protected String matchName; protected String matchName;
protected TournamentOptions options; protected TournamentOptions options;
protected TournamentType tournamentType;
protected List<ExpansionSet> sets = new ArrayList<ExpansionSet>(); protected List<ExpansionSet> sets = new ArrayList<ExpansionSet>();
protected String setsInfoShort; protected String setsInfoShort;
@ -332,4 +333,14 @@ public abstract class TournamentImpl implements Tournament {
return new Date(endTime.getTime()); return new Date(endTime.getTime());
} }
@Override
public TournamentType getTournamentType() {
return tournamentType;
}
@Override
public void setTournamentType(TournamentType tournamentType) {
this.tournamentType = tournamentType;
}
} }

View file

@ -40,7 +40,7 @@ import mage.game.match.MatchOptions;
public class TournamentOptions implements Serializable { public class TournamentOptions implements Serializable {
protected String name; protected String name;
protected String tournamentType; protected String tournamentType;;
protected List<String> playerTypes = new ArrayList<String>(); protected List<String> playerTypes = new ArrayList<String>();
protected MatchOptions matchOptions = new MatchOptions("", "Two Player Duel"); protected MatchOptions matchOptions = new MatchOptions("", "Two Player Duel");
protected LimitedOptions limitedOptions; protected LimitedOptions limitedOptions;

View file

@ -28,19 +28,32 @@
package mage.players; package mage.players;
import mage.constants.Outcome; import java.io.Serializable;
import mage.constants.RangeOfInfluence; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import mage.MageItem; import mage.MageItem;
import mage.MageObject; import mage.MageObject;
import mage.abilities.*; import mage.abilities.Abilities;
import mage.abilities.Ability;
import mage.abilities.ActivatedAbility;
import mage.abilities.Mode;
import mage.abilities.Modes;
import mage.abilities.SpellAbility;
import mage.abilities.TriggeredAbility;
import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCost;
import mage.cards.Card; import mage.cards.Card;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.choices.Choice; import mage.choices.Choice;
import mage.constants.Outcome;
import mage.constants.RangeOfInfluence;
import mage.counters.Counter; import mage.counters.Counter;
import mage.counters.Counters; import mage.counters.Counters;
import mage.game.Game; import mage.game.Game;
import mage.game.Table;
import mage.game.draft.Draft; import mage.game.draft.Draft;
import mage.game.match.Match; import mage.game.match.Match;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -52,9 +65,6 @@ import mage.target.TargetCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import mage.util.Copyable; import mage.util.Copyable;
import java.io.Serializable;
import java.util.*;
/** /**
* *
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
@ -322,4 +332,11 @@ public interface Player extends MageItem, Copyable<Player> {
void setReachedNextTurnAfterLeaving(boolean reachedNextTurnAfterLeaving); void setReachedNextTurnAfterLeaving(boolean reachedNextTurnAfterLeaving);
boolean hasReachedNextTurnAfterLeaving(); boolean hasReachedNextTurnAfterLeaving();
/**
* Checks if a AI player is able to join a table
* i.e. Draft - bot can not enter a table with constructed format
* @param table
* @return
*/
boolean canJoinTable(Table table);
} }

View file

@ -91,6 +91,7 @@ import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.filter.predicate.permanent.PermanentIdPredicate;
import mage.game.ExileZone; import mage.game.ExileZone;
import mage.game.Game; import mage.game.Game;
import mage.game.Table;
import mage.game.combat.CombatGroup; import mage.game.combat.CombatGroup;
import mage.game.events.DamagePlayerEvent; import mage.game.events.DamagePlayerEvent;
import mage.game.events.DamagedPlayerEvent; import mage.game.events.DamagedPlayerEvent;
@ -2028,4 +2029,8 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
return reachedNextTurnAfterLeaving; return reachedNextTurnAfterLeaving;
} }
@Override
public boolean canJoinTable(Table table) {
return true;
}
} }