diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index 3ae8a937e29..07d68ca4369 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -579,26 +579,27 @@ public class DeckEditorPanel extends javax.swing.JPanel { int ret = fcImportDeck.showOpenDialog(this); if (ret == JFileChooser.APPROVE_OPTION) { File file = fcImportDeck.getSelectedFile(); - try { - setCursor(new Cursor(Cursor.WAIT_CURSOR)); - DeckImporter importer = getDeckImporter(file.getPath()); - if (importer != null) { - deck = Deck.load(importer.importDeck(file.getPath())); + if (file != null) { + try { + setCursor(new Cursor(Cursor.WAIT_CURSOR)); + DeckImporter importer = getDeckImporter(file.getPath()); + if (importer != null) { + deck = Deck.load(importer.importDeck(file.getPath())); + } + else { + JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Unknown deck format", "Error importing deck", JOptionPane.ERROR_MESSAGE); + } + } catch (Exception ex) { + Logger.getLogger(DeckEditorPanel.class.getName()).log(Level.SEVERE, null, ex); } - else { - JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Unknown deck format", "Error importing deck", JOptionPane.ERROR_MESSAGE); + finally { + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } - } catch (Exception ex) { - Logger.getLogger(DeckEditorPanel.class.getName()).log(Level.SEVERE, null, ex); - } - finally { - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - refreshDeck(); - try { - if (file != null) + refreshDeck(); + try { MageFrame.getPreferences().put("lastImportFolder", file.getCanonicalPath()); - } catch (IOException ex) { } + } catch (IOException ex) { } + } } fcImportDeck.setSelectedFile(null); }//GEN-LAST:event_btnImportActionPerformed diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index 00487ff5011..c2166c65d6f 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -219,7 +219,7 @@ public class MageServerImpl implements MageServer { try { List players = new ArrayList(); for (Session session : SessionManager.getInstance().getSessions().values()) { - players.add(session.getUsername()); + players.add(session.getUser().getName()); } return players; } diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index fe9321b9a34..1b6cbf763db 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -131,7 +131,7 @@ public class Main { public void handleConnectionException(Throwable throwable, Client client) { Session session = SessionManager.getInstance().getSession(client.getSessionId()); if (session != null) { - String sessionName = session.getUsername() + " at " + session.getHost(); + String sessionName = session.getUser().getName() + " at " + session.getHost(); if (throwable instanceof ClientDisconnectedException) { logger.info("client disconnected - " + sessionName); } diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index 4134d6e6252..868dc6ca8da 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -30,6 +30,7 @@ package mage.server; import java.util.Date; import java.util.UUID; +import mage.MageException; import mage.cards.decks.Deck; import mage.interfaces.callback.ClientCallback; import mage.server.game.GameManager; @@ -49,7 +50,7 @@ public class Session { private final static Logger logger = Logger.getLogger(Session.class); private String sessionId; - private String username; + private User user; private String host; private Date timeConnected; private boolean isAdmin = false; @@ -62,14 +63,27 @@ public class Session { this.timeConnected = new Date(); } - public void registerUser(String userName) { + public void registerUser(String userName) throws MageException { this.isAdmin = false; - this.username = userName; + User user = UserManager.getInstance().findUser(userName); + if (user == null) { + user = UserManager.getInstance().createUser(userName, host); + } + else { + if (user.getHost().equals(host)) { + logger.info("Reconnecting session for " + userName); + } + else { + throw new MageException("User name already in use"); + } + } + UserManager.getInstance().connectToSession(sessionId, userName); + this.user = user; } public void registerAdmin() { this.isAdmin = true; - this.username = "Admin"; + this.user = UserManager.getInstance().createUser("Admin", host); } public String getId() { @@ -80,6 +94,7 @@ public class Session { TableManager.getInstance().removeSession(sessionId); GameManager.getInstance().removeSession(sessionId); ChatManager.getInstance().removeSession(sessionId); + UserManager.getInstance().disconnect(user.getName()); } public synchronized void fireCallback(final ClientCallback call) { @@ -118,8 +133,8 @@ public class Session { fireCallback(new ClientCallback("replayGame", gameId)); } - public String getUsername() { - return username; + public User getUser() { + return user; } public boolean isAdmin() { diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManager.java index 79c9f23e69e..9779b358d93 100644 --- a/Mage.Server/src/main/java/mage/server/SessionManager.java +++ b/Mage.Server/src/main/java/mage/server/SessionManager.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import mage.MageException; import mage.view.UserView; import org.apache.log4j.Logger; import org.jboss.remoting.callback.InvokerCallbackHandler; @@ -62,7 +63,7 @@ public class SessionManager { sessions.put(sessionId, session); } - public boolean registerUser(String sessionId, String userName) { + public boolean registerUser(String sessionId, String userName) throws MageException { Session session = sessions.get(sessionId); if (session != null) { session.registerUser(userName); @@ -103,7 +104,7 @@ public class SessionManager { Session admin = sessions.get(sessionId); if (admin != null && admin.isAdmin()) { for (Session session: sessions.values()) { - users.add(new UserView(session.getUsername(), "", session.getId(), session.getConnectionTime())); + users.add(new UserView(session.getUser().getName(), "", session.getId(), session.getConnectionTime())); } } return users; diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 93a904b7939..d4c5f4415c4 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -83,7 +83,7 @@ public class TableController { match = GameFactory.getInstance().createMatch(options.getGameType(), options); Session session = SessionManager.getInstance().getSession(sessionId); if (session != null) - controllerName = session.getUsername(); + controllerName = session.getUser().getName(); else controllerName = "System"; table = new Table(roomId, options.getGameType(), options.getName(), controllerName, DeckValidatorFactory.getInstance().createDeckValidator(options.getDeckType()), options.getPlayerTypes(), match); @@ -96,7 +96,7 @@ public class TableController { tournament = TournamentFactory.getInstance().createTournament(options.getTournamentType(), options); Session session = SessionManager.getInstance().getSession(sessionId); if (session != null) - controllerName = session.getUsername(); + controllerName = session.getUser().getName(); else controllerName = "System"; table = new Table(roomId, options.getTournamentType(), options.getName(), controllerName, DeckValidatorFactory.getInstance().createDeckValidator(options.getMatchOptions().getDeckType()), options.getPlayerTypes(), tournament);