diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml
index 15c5a0264b..425594b43f 100644
--- a/Mage.Client/pom.xml
+++ b/Mage.Client/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
org.mage
@@ -88,7 +88,7 @@
${project.groupId}
Mage-Card-Plugin
- 0.6
+ 0.5
runtime
diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java
index 3f37828235..1d06f912e9 100644
--- a/Mage.Client/src/main/java/mage/client/MageFrame.java
+++ b/Mage.Client/src/main/java/mage/client/MageFrame.java
@@ -47,7 +47,6 @@ import mage.client.deckeditor.collection.viewer.CollectionViewerPane;
import mage.client.dialog.*;
import mage.client.plugins.impl.Plugins;
import mage.client.util.EDTExceptionHandler;
-import mage.client.util.SettingsManager;
import mage.client.util.gui.ArrowBuilder;
import mage.components.ImagePanel;
@@ -83,6 +82,7 @@ import mage.client.remote.CallbackClientImpl;
import mage.client.table.TablesPane;
import mage.client.tournament.TournamentPane;
import mage.client.tournament.TournamentPanel;
+import mage.client.util.SettingsManager;
import mage.game.match.MatchOptions;
import mage.interfaces.MageClient;
import mage.interfaces.callback.CallbackClient;
@@ -109,7 +109,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
private static Preferences prefs = Preferences.userNodeForPackage(MageFrame.class);
private JLabel title;
private Rectangle titleRectangle;
- private final static MageVersion version = new MageVersion(0, 7, 4, "");
+ private final static MageVersion version = new MageVersion(0, 8, 0, "");
private UUID clientId;
private static MagePane activeFrame;
private static boolean liteMode = false;
@@ -174,8 +174,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
initComponents();
setSize(1024, 768);
- SettingsManager.getInstance().setScreenWidthAndHeight(1024, 768);
- this.setExtendedState(JFrame.MAXIMIZED_BOTH);
+ SettingsManager.getInstance().setScreenWidthAndHeight(1024, 768);
+ this.setExtendedState(JFrame.MAXIMIZED_BOTH);
session = new Session(this);
callbackClient = new CallbackClientImpl(this);
@@ -201,6 +201,11 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
addMageLabel();
setAppIcon();
+ //PlayerPanelNew n = new PlayerPanelNew();
+ //n.setBounds(100,100,100,300);
+ //n.setVisible(true);
+ //backgroundPane.add(n);
+
desktopPane.add(ArrowBuilder.getArrowsPanel(), JLayeredPane.DRAG_LAYER);
desktopPane.addComponentListener(new ComponentAdapter() {
@@ -210,11 +215,12 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
int height = ((JComponent) e.getSource()).getHeight();
SettingsManager.getInstance().setScreenWidthAndHeight(width, height);
if (!liteMode) {
- backgroundPane.setSize(width, height);
+ backgroundPane.setSize(width, height);
}
JPanel arrowsPanel = ArrowBuilder.getArrowsPanelRef();
if (arrowsPanel != null) arrowsPanel.setSize(width, height);
if (title != null) {
+ //title.setBorder(BorderFactory.createLineBorder(Color.red));
title.setBounds((int) (width - titleRectangle.getWidth()) / 2, (int) (height - titleRectangle.getHeight()) / 2, titleRectangle.width, titleRectangle.height);
}
}
@@ -759,7 +765,6 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
}//GEN-LAST:event_btnCollectionViewerActionPerformed
private void btnPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPreferencesActionPerformed
- //PhasesDialog.main(new String[]{});
PreferencesDialog.main(new String[]{});
}//GEN-LAST:event_btnPreferencesActionPerformed
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 14220cfe1b..cff953ec95 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
@@ -227,10 +227,13 @@ public class DeckEditorPanel extends javax.swing.JPanel {
@Override
public void event(Event event) {
if (event.getEventName().equals("double-click")) {
+ //boolean isListView = cardSelector.getCardsList() instanceof TableModel;
for (Card card: deck.getSideboard()) {
if (card.getId().equals(event.getSource())) {
deck.getSideboard().remove(card);
+ //if (!isListView) {
deck.getCards().add(card);
+ //}
break;
}
}
@@ -248,7 +251,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
private void hidePopup() {
Plugins.getInstance().getActionCallback().mouseExited(null, null);
}
-
+
public void hideDeckEditor() {
Component c = this.getParent();
while (c != null && !(c instanceof DeckEditorPane)) {
diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
index d03eb4c49c..e1c2ee9ee5 100644
--- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
+++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
@@ -80,9 +80,6 @@ public class CallbackClientImpl implements CallbackClient {
public void run() {
try {
logger.info(callback.getMessageId() + " -- " + callback.getMethod());
- if (callback.getMethod() == null) { // may happen on disconnect
- return;
- }
if (callback.getMethod().equals("startGame")) {
TableClientMessage message = (TableClientMessage) callback.getData();
GameManager.getInstance().setCurrentPlayerUUID(message.getPlayerId());
@@ -247,7 +244,10 @@ public class CallbackClientImpl implements CallbackClient {
}
}
else if (callback.getMethod().equals("draftInit")) {
-
+ DraftClientMessage message = (DraftClientMessage) callback.getData();
+ DraftPanel panel = frame.getDraft(callback.getObjectId());
+ if (panel != null)
+ panel.loadBooster(message.getDraftPickView());
}
else if (callback.getMethod().equals("tournamentInit")) {
diff --git a/Mage.Client/src/main/resources/log4j.properties b/Mage.Client/src/main/resources/log4j.properties
index 08d7f0e74f..cdef4d6b9e 100644
--- a/Mage.Client/src/main/resources/log4j.properties
+++ b/Mage.Client/src/main/resources/log4j.properties
@@ -1,5 +1,5 @@
#default levels
-log4j.rootLogger=debug, console
+log4j.rootLogger=info, console
#console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml
index 5cec33ff56..506977ac02 100644
--- a/Mage.Common/pom.xml
+++ b/Mage.Common/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage-Common
@@ -24,6 +24,31 @@
com.googlecode.jspf
jspf-core
${jspf-version}
+
+
+ org.jboss.remoting
+ jboss-remoting
+ 2.5.4.SP2
+
+
+ jboss
+ jboss-common-core
+ 2.2.16.GA
+
+
+ jboss
+ jboss-serialization
+ 1.0.3.GA
+
+
+ concurrent
+ concurrent
+ 1.3.4
+
+
+ trove
+ trove
+ 1.0.2
diff --git a/Mage.Common/src/mage/interfaces/MageServer.java b/Mage.Common/src/mage/interfaces/MageServer.java
new file mode 100644
index 0000000000..2982bf681b
--- /dev/null
+++ b/Mage.Common/src/mage/interfaces/MageServer.java
@@ -0,0 +1,124 @@
+/*
+* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are
+* permitted provided that the following conditions are met:
+*
+* 1. Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* The views and conclusions contained in the software and documentation are those of the
+* authors and should not be interpreted as representing official policies, either expressed
+* or implied, of BetaSteward_at_googlemail.com.
+*/
+
+package mage.interfaces;
+
+import mage.game.match.MatchOptions;
+import java.util.List;
+import java.util.UUID;
+import mage.MageException;
+import mage.cards.decks.DeckCardLists;
+import mage.game.GameException;
+import mage.game.tournament.TournamentOptions;
+import mage.utils.MageVersion;
+import mage.view.DraftPickView;
+import mage.view.TableView;
+import mage.view.GameView;
+import mage.view.TournamentView;
+import mage.view.UserView;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public interface MageServer {
+
+ public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException;
+ public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException;
+ public void deregisterClient(String sessionId) throws MageException;
+
+ public ServerState getServerState() throws MageException;
+
+ //table methods
+ public TableView createTable(String sessionId, UUID roomId, MatchOptions matchOptions) throws MageException;
+ public TableView createTournamentTable(String sessionId, UUID roomId, TournamentOptions tournamentOptions) throws MageException;
+ public boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException, GameException;
+ public boolean joinTournamentTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill) throws MageException, GameException;
+ public boolean submitDeck(String sessionId, UUID tableId, DeckCardLists deckList) throws MageException, GameException;
+ public boolean watchTable(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public void leaveTable(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public void swapSeats(String sessionId, UUID roomId, UUID tableId, int seatNum1, int seatNum2) throws MageException;
+ public void removeTable(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public boolean isTableOwner(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public TableView getTable(UUID roomId, UUID tableId) throws MageException;
+ public List getTables(UUID roomId) throws MageException;
+ public List getConnectedPlayers(UUID roomId) throws MageException;
+
+ //chat methods
+ public void sendChatMessage(UUID chatId, String userName, String message) throws MageException;
+ public void joinChat(UUID chatId, String sessionId, String userName) throws MageException;
+ public void leaveChat(UUID chatId, String sessionId) throws MageException;
+ public UUID getTableChatId(UUID tableId) throws MageException;
+ public UUID getGameChatId(UUID gameId) throws MageException;
+ public UUID getRoomChatId(UUID roomId) throws MageException;
+ public UUID getTournamentChatId(UUID tournamentId) throws MageException;
+
+ //room methods
+ public UUID getMainRoomId() throws MageException;
+
+ //game methods
+ public void startMatch(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public void joinGame(UUID gameId, String sessionId) throws MageException;
+ public void watchGame(UUID gameId, String sessionId) throws MageException;
+ public void stopWatching(UUID gameId, String sessionId) throws MageException;
+ public void sendPlayerUUID(UUID gameId, String sessionId, UUID data) throws MageException;
+ public void sendPlayerString(UUID gameId, String sessionId, String data) throws MageException;
+ public void sendPlayerBoolean(UUID gameId, String sessionId, Boolean data) throws MageException;
+ public void sendPlayerInteger(UUID gameId, String sessionId, Integer data) throws MageException;
+ public void concedeGame(UUID gameId, String sessionId) throws MageException;
+
+ //tournament methods
+ public void startTournament(String sessionId, UUID roomId, UUID tableId) throws MageException;
+ public void joinTournament(UUID draftId, String sessionId) throws MageException;
+ public TournamentView getTournament(UUID tournamentId) throws MageException;
+
+ //draft methods
+ public void joinDraft(UUID draftId, String sessionId) throws MageException;
+ public DraftPickView sendCardPick(UUID draftId, String sessionId, UUID cardId) throws MageException;
+
+ //challenge methods
+ public void startChallenge(String sessionId, UUID roomId, UUID tableId, UUID challengeId) throws MageException;
+
+ //replay methods
+ public void replayGame(UUID gameId, String sessionId) throws MageException;
+ public void startReplay(UUID gameId, String sessionId) throws MageException;
+ public void stopReplay(UUID gameId, String sessionId) throws MageException;
+ public void nextPlay(UUID gameId, String sessionId) throws MageException;
+ public void previousPlay(UUID gameId, String sessionId) throws MageException;
+
+ //test methods
+ public void cheat(UUID gameId, String sessionId, UUID playerId, DeckCardLists deckList) throws MageException;
+ public boolean cheat(UUID gameId, String sessionId, UUID playerId, String cardName) throws MageException;
+ public GameView getGameView(UUID gameId, String sessionId, UUID playerId) throws MageException;
+
+ //admin methods
+ public List getUsers(String sessionId) throws MageException;
+ public void disconnectUser(String sessionId, String userSessionId) throws MageException;
+ public void removeTable(String sessionId, UUID tableId) throws MageException;
+
+}
diff --git a/Mage.Common/src/mage/interfaces/Server.java b/Mage.Common/src/mage/interfaces/Server.java
deleted file mode 100644
index c8889a03a9..0000000000
--- a/Mage.Common/src/mage/interfaces/Server.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice, this list of
-* conditions and the following disclaimer.
-*
-* 2. Redistributions in binary form must reproduce the above copyright notice, this list
-* of conditions and the following disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
-package mage.interfaces;
-
-import mage.game.match.MatchOptions;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.util.List;
-import java.util.UUID;
-import mage.MageException;
-import mage.cards.decks.DeckCardLists;
-import mage.game.GameException;
-import mage.game.tournament.TournamentOptions;
-import mage.interfaces.callback.CallbackServer;
-import mage.utils.MageVersion;
-import mage.view.DraftPickView;
-import mage.view.TableView;
-import mage.view.GameView;
-import mage.view.TournamentView;
-import mage.view.UserView;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public interface Server extends Remote, CallbackServer {
-
- public UUID registerClient(String userName, UUID clientId, MageVersion version) throws RemoteException, MageException;
- public UUID registerAdmin(String password, MageVersion version) throws RemoteException, MageException;
- public void deregisterClient(UUID sessionId) throws RemoteException, MageException;
- public void ack(String message, UUID sessionId) throws RemoteException, MageException;
- public boolean ping(UUID sessionId) throws RemoteException, MageException;
-
- public ServerState getServerState() throws RemoteException, MageException;
-
- //table methods
- public TableView createTable(UUID sessionId, UUID roomId, MatchOptions matchOptions) throws RemoteException, MageException;
- public TableView createTournamentTable(UUID sessionId, UUID roomId, TournamentOptions tournamentOptions) throws RemoteException, MageException;
- public boolean joinTable(UUID sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws RemoteException, MageException, GameException;
- public boolean joinTournamentTable(UUID sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill) throws RemoteException, MageException, GameException;
- public boolean submitDeck(UUID sessionId, UUID tableId, DeckCardLists deckList) throws RemoteException, MageException, GameException;
- public boolean watchTable(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public void leaveTable(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public void swapSeats(UUID sessionId, UUID roomId, UUID tableId, int seatNum1, int seatNum2) throws RemoteException, MageException;
- public void removeTable(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public boolean isTableOwner(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public TableView getTable(UUID roomId, UUID tableId) throws RemoteException, MageException;
- public List getTables(UUID roomId) throws RemoteException, MageException;
- public List getConnectedPlayers(UUID roomId) throws RemoteException, MageException;
-
- //chat methods
- public void sendChatMessage(UUID chatId, String userName, String message) throws RemoteException, MageException;
- public void joinChat(UUID chatId, UUID sessionId, String userName) throws RemoteException, MageException;
- public void leaveChat(UUID chatId, UUID sessionId) throws RemoteException, MageException;
- public UUID getTableChatId(UUID tableId) throws RemoteException, MageException;
- public UUID getGameChatId(UUID gameId) throws RemoteException, MageException;
- public UUID getRoomChatId(UUID roomId) throws RemoteException, MageException;
- public UUID getTournamentChatId(UUID tournamentId) throws RemoteException, MageException;
-
- //room methods
- public UUID getMainRoomId() throws RemoteException, MageException;
-
- //game methods
- public void startMatch(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public void joinGame(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void watchGame(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void stopWatching(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void sendPlayerUUID(UUID gameId, UUID sessionId, UUID data) throws RemoteException, MageException;
- public void sendPlayerString(UUID gameId, UUID sessionId, String data) throws RemoteException, MageException;
- public void sendPlayerBoolean(UUID gameId, UUID sessionId, Boolean data) throws RemoteException, MageException;
- public void sendPlayerInteger(UUID gameId, UUID sessionId, Integer data) throws RemoteException, MageException;
- public void concedeGame(UUID gameId, UUID sessionId) throws RemoteException, MageException;
-
- //tournament methods
- public void startTournament(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException;
- public void joinTournament(UUID draftId, UUID sessionId) throws RemoteException, MageException;
- public TournamentView getTournament(UUID tournamentId) throws RemoteException, MageException;
-
- //draft methods
- public void joinDraft(UUID draftId, UUID sessionId) throws RemoteException, MageException;
- public DraftPickView sendCardPick(UUID draftId, UUID sessionId, UUID cardId) throws RemoteException, MageException;
-
- //challenge methods
- public void startChallenge(UUID sessionId, UUID roomId, UUID tableId, UUID challengeId) throws RemoteException, MageException;
-
- //replay methods
- public void replayGame(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void startReplay(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void stopReplay(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void nextPlay(UUID gameId, UUID sessionId) throws RemoteException, MageException;
- public void previousPlay(UUID gameId, UUID sessionId) throws RemoteException, MageException;
-
- //test methods
- public void cheat(UUID gameId, UUID sessionId, UUID playerId, DeckCardLists deckList) throws RemoteException, MageException;
- public boolean cheat(UUID gameId, UUID sessionId, UUID playerId, String cardName) throws RemoteException, MageException;
- public GameView getGameView(UUID gameId, UUID sessionId, UUID playerId) throws RemoteException, MageException;
-
- //admin methods
- public List getUsers(UUID sessionId) throws RemoteException, MageException;
- public void disconnectUser(UUID sessionId, UUID userSessionId) throws RemoteException, MageException;
- public void removeTable(UUID sessionId, UUID tableId) throws RemoteException, MageException;
-
-}
diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java b/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java
deleted file mode 100644
index b643f570f9..0000000000
--- a/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of BetaSteward_at_googlemail.com.
- */
-
-package mage.interfaces.callback;
-
-import java.util.UUID;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public class CallbackClientDaemon extends Thread {
-
- private final static Logger logger = Logger.getLogger(CallbackClientDaemon.class);
-
- private static ExecutorService callbackExecutor = Executors.newCachedThreadPool();
- private final CallbackClient client;
- private final CallbackServer server;
- private final UUID id;
-
- public CallbackClientDaemon(UUID id, CallbackClient client, CallbackServer server) {
- this.client = client;
- this.server = server;
- this.id = id;
- setDaemon(true);
- start();
- }
-
- @Override
- public void run() {
- try {
- while(true) {
- final ClientCallback callback = server.callback(id);
- callbackExecutor.submit(
- new Runnable() {
- @Override
- public void run() {
- try {
- if (callback != null) {
- client.processCallback(callback);
- }
- }
- catch (Exception ex) {
- logger.fatal("CallbackClientDaemon error ", ex);
- }
- }
- }
- );
- }
- } catch(Exception ex) {
- logger.fatal("CallbackClientDaemon error ", ex);
- }
- }
-}
diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackException.java b/Mage.Common/src/mage/interfaces/callback/CallbackException.java
deleted file mode 100644
index c388f3cfe6..0000000000
--- a/Mage.Common/src/mage/interfaces/callback/CallbackException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of BetaSteward_at_googlemail.com.
- */
-package mage.interfaces.callback;
-
-import mage.MageException;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public class CallbackException extends MageException {
-
- public CallbackException(String message) {
- super(message);
- }
-
- public CallbackException(Throwable t) {
- super(t);
- }
-
-}
diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackServer.java b/Mage.Common/src/mage/interfaces/callback/CallbackServer.java
deleted file mode 100644
index f3e1b8ce35..0000000000
--- a/Mage.Common/src/mage/interfaces/callback/CallbackServer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of BetaSteward_at_googlemail.com.
- */
-
-package mage.interfaces.callback;
-
-import java.rmi.RemoteException;
-import java.util.UUID;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public interface CallbackServer {
-
- public ClientCallback callback(UUID clientId) throws RemoteException;
-
-}
diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java b/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java
deleted file mode 100644
index 31e130a543..0000000000
--- a/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of BetaSteward_at_googlemail.com.
- */
-
-package mage.interfaces.callback;
-
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public class CallbackServerSession {
-
- private final static Logger logger = Logger.getLogger(CallbackServerSession.class);
-
- private final ClientCallback callback = new ClientCallback();
- private final ReentrantLock lock = new ReentrantLock();
- private final Condition waiting = lock.newCondition();
- private final Condition callbackCalled = lock.newCondition();
- private boolean waitingForCallback;
- private boolean threadAlive = true;
-
- /**
- *
- * blocks the thread until a callback is requested
- *
- * @return ClientCallback - the callback requested
- */
- public ClientCallback callback() throws InterruptedException {
- callback.clear();
- lock.lock();
- try {
- waitingForCallback = true;
- waiting.signal();
- while (callback.getMethod() == null && threadAlive) {
- logger.trace("waiting for callback");
- callbackCalled.await();
- }
- waitingForCallback = false;
- logger.trace("callback called:" + callback.getMethod());
- return callback;
- }
- finally {
- lock.unlock();
- }
- }
-
- /**
- *
- * requests a callback
- *
- * @param call - the callback to request
- */
- public void setCallback(ClientCallback call) throws InterruptedException {
- lock.lock();
- try {
- while (!waitingForCallback) {
- logger.trace("waiting for callback state to call:" + call.getMethod());
- waiting.await();
- }
- callback.setMethod(call.getMethod());
- callback.setData(call.getData());
- callback.setObjectId(call.getObjectId());
- callback.setMessageId(call.getMessageId());
- callbackCalled.signal();
- }
- finally {
- lock.unlock();
- }
- }
-
- public void destroy() {
- lock.lock();
- try {
- threadAlive = false;
- callbackCalled.signal();
- }
- finally {
- lock.unlock();
- }
- }
-
-}
diff --git a/Mage.Common/src/mage/remote/Connection.java b/Mage.Common/src/mage/remote/Connection.java
index 691b5923a2..e120a1ed60 100644
--- a/Mage.Common/src/mage/remote/Connection.java
+++ b/Mage.Common/src/mage/remote/Connection.java
@@ -28,9 +28,12 @@
package mage.remote;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import mage.interfaces.Server;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
/**
*
@@ -47,20 +50,13 @@ public class Connection {
private int proxyPort;
private String proxyUsername;
private String proxyPassword;
-
-// protected Server getServer() {
-// Server server = null;
-// try {
-// Registry reg = LocateRegistry.getRegistry(host, port);
-// server = (Server) reg.lookup("mage-server");
-// }
-// catch (Exception ignored) {}
-// return server;
-// }
+
+ private static final String serialization = "?serializationtype=jboss";
+ private static final String transport = "bisocket";
@Override
public int hashCode() {
- return (host + Integer.toString(port) + proxyType.toString()).hashCode();
+ return (transport + host + Integer.toString(port) + proxyType.toString()).hashCode();
}
@Override
@@ -74,11 +70,18 @@ public class Connection {
@Override
public String toString() {
- return host + ":" + Integer.toString(port);
+ return host + ":" + Integer.toString(port) + "/" + serialization;
}
public String getURI() {
- return "bisocket://" + host + ":" + port;
+ if (host.equals("localhost")) {
+ try {
+ return transport + "://" + getLocalAddress().getHostAddress() + ":" + port + "/" + serialization;
+ } catch (SocketException ex) {
+ // just use localhost if can't find local ip
+ }
+ }
+ return transport + "://" + host + ":" + port + "/" + serialization;
}
public ProxyType getProxyType() {
@@ -174,5 +177,21 @@ public class Connection {
public void setProxyPassword(String proxyPassword) {
this.proxyPassword = proxyPassword;
}
+
+ public static InetAddress getLocalAddress() throws SocketException {
+ for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) {
+ NetworkInterface iface = interfaces.nextElement( );
+ if (iface.isLoopback())
+ continue;
+ for (InterfaceAddress addr: iface.getInterfaceAddresses())
+ {
+ InetAddress iaddr = addr.getAddress();
+ if (iaddr instanceof Inet4Address) {
+ return iaddr;
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/Mage.Common/src/mage/remote/Session.java b/Mage.Common/src/mage/remote/Session.java
index ca623e0302..55079d9de7 100644
--- a/Mage.Common/src/mage/remote/Session.java
+++ b/Mage.Common/src/mage/remote/Session.java
@@ -29,19 +29,13 @@
package mage.remote;
import java.net.Authenticator;
+import java.net.MalformedURLException;
import java.net.PasswordAuthentication;
-import java.rmi.NotBoundException;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
import mage.cards.decks.DeckCardLists;
import mage.game.GameException;
import mage.MageException;
@@ -49,15 +43,26 @@ import mage.constants.Constants.SessionState;
import mage.game.match.MatchOptions;
import mage.game.tournament.TournamentOptions;
import mage.interfaces.MageClient;
-import mage.interfaces.Server;
+import mage.interfaces.MageServer;
import mage.interfaces.ServerState;
-import mage.interfaces.callback.CallbackClientDaemon;
+import mage.interfaces.callback.ClientCallback;
import mage.view.DraftPickView;
import mage.view.GameTypeView;
import mage.view.TableView;
import mage.view.TournamentTypeView;
import mage.view.TournamentView;
+import mage.view.UserView;
import org.apache.log4j.Logger;
+import org.jboss.remoting.Client;
+import org.jboss.remoting.ConnectionListener;
+import org.jboss.remoting.ConnectionValidator;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.transport.bisocket.Bisocket;
+import org.jboss.remoting.transport.socket.SocketWrapper;
+import org.jboss.remoting.transporter.TransporterClient;
/**
*
@@ -66,16 +71,13 @@ import org.apache.log4j.Logger;
public class Session {
private final static Logger logger = Logger.getLogger(Session.class);
- private static ScheduledExecutorService sessionExecutor = Executors.newScheduledThreadPool(1);
- private UUID sessionId;
- private Server server;
+ private String sessionId;
+ private MageServer server;
private MageClient client;
- private String userName;
+ private Client callbackClient;
private ServerState serverState;
private SessionState sessionState = SessionState.DISCONNECTED;
- private CallbackClientDaemon callbackDaemon;
- private ScheduledFuture> future;
private Connection connection;
/**
@@ -85,7 +87,7 @@ public class Session {
*
* @author nantuko
*/
- private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+// private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public Session(MageClient client) {
this.client = client;
@@ -102,7 +104,6 @@ public class Session {
public boolean connect() {
sessionState = SessionState.CONNECTING;
try {
- System.setSecurityManager(null);
System.setProperty("http.nonProxyHosts", "code.google.com");
System.setProperty("socksNonProxyHosts", "code.google.com");
@@ -123,47 +124,67 @@ public class Session {
Authenticator.setDefault(new MageAuthenticator(connection.getProxyUsername(), connection.getProxyPassword()));
break;
}
- Registry reg = LocateRegistry.getRegistry(connection.getHost(), connection.getPort());
- this.server = (Server) reg.lookup("mage-server");
- this.userName = connection.getUsername();
- sessionId = server.registerClient(userName, client.getId(), client.getVersion());
- callbackDaemon = new CallbackClientDaemon(sessionId, client, server);
- sessionState = SessionState.CONNECTED;
- serverState = server.getServerState();
- future = sessionExecutor.scheduleWithFixedDelay(new ServerPinger(), 5, 5, TimeUnit.SECONDS);
- logger.info("Connected to RMI server at " + connection.getHost() + ":" + connection.getPort());
- client.connected("Connected to " + connection.getHost() + ":" + connection.getPort() + " ");
- return true;
- } catch (MageException ex) {
+ InvokerLocator clientLocator = new InvokerLocator(connection.getURI());
+ Map metadata = new HashMap();
+ metadata.put(SocketWrapper.WRITE_TIMEOUT, "2000");
+ metadata.put("generalizeSocketException", "true");
+ server = (MageServer) TransporterClient.createTransporterClient(clientLocator.getLocatorURI(), MageServer.class, metadata);
+
+ Map clientMetadata = new HashMap();
+ clientMetadata.put(SocketWrapper.WRITE_TIMEOUT, "2000");
+ clientMetadata.put("generalizeSocketException", "true");
+ clientMetadata.put(Client.ENABLE_LEASE, "true");
+ callbackClient = new Client(clientLocator, "callback", clientMetadata);
+
+ Map listenerMetadata = new HashMap();
+ listenerMetadata.put(ConnectionValidator.VALIDATOR_PING_PERIOD, "5000");
+ listenerMetadata.put(ConnectionValidator.VALIDATOR_PING_TIMEOUT, "2000");
+ callbackClient.connect(new ClientConnectionListener(), listenerMetadata);
+
+ Map callbackMetadata = new HashMap();
+ callbackMetadata.put(Bisocket.IS_CALLBACK_SERVER, "true");
+ CallbackHandler callbackHandler = new CallbackHandler();
+ callbackClient.addListener(callbackHandler, callbackMetadata);
+ callbackClient.invoke("");
+
+ this.sessionId = callbackClient.getSessionId();
+ boolean registerResult = false;
+ if (connection.getPassword() == null)
+ registerResult = server.registerClient(connection.getUsername(), sessionId, client.getVersion());
+ else
+ registerResult = server.registerAdmin(connection.getPassword(), sessionId, client.getVersion());
+ if (registerResult) {
+ sessionState = SessionState.CONNECTED;
+ serverState = server.getServerState();
+ logger.info("Connected to MAGE server at " + connection.getHost() + ":" + connection.getPort());
+ client.connected("Connected to " + connection.getHost() + ":" + connection.getPort() + " ");
+ return true;
+ }
+ disconnect(false);
+ client.showMessage("Unable to connect to server.");
+ } catch (MalformedURLException ex) {
logger.fatal("", ex);
- disconnect(false);
client.showMessage("Unable to connect to server. " + ex.getMessage());
- } catch (RemoteException ex) {
- logger.fatal("Unable to connect to server - ", ex);
+ } catch (Throwable t) {
+ logger.fatal("Unable to connect to server - ", t);
disconnect(false);
- client.showMessage("Unable to connect to server. " + ex.getMessage());
- } catch (NotBoundException ex) {
- logger.fatal("Unable to connect to server - ", ex);
+ client.showMessage("Unable to connect to server. " + t.getMessage());
}
return false;
}
public synchronized void disconnect(boolean showMessage) {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
sessionState = SessionState.DISCONNECTING;
- if (future != null && !future.isDone())
- future.cancel(true);
- if (connection == null || server == null)
+ if (connection == null)
return;
- if (sessionState == SessionState.DISCONNECTING) {
- try {
- server.deregisterClient(sessionId);
- } catch (Exception ex) {
- logger.fatal("Error disconnecting ...", ex);
- }
+ try {
+ callbackClient.disconnect();
+ TransporterClient.destroyTransporterClient(server);
+ } catch (Throwable ex) {
+ logger.fatal("Error disconnecting ...", ex);
}
- server = null;
- if (sessionState == SessionState.DISCONNECTING) {
+ if (sessionState == SessionState.DISCONNECTING || sessionState == SessionState.CONNECTING) {
sessionState = SessionState.DISCONNECTED;
logger.info("Disconnected ... ");
}
@@ -172,19 +193,25 @@ public class Session {
client.showError("Server error. You have been disconnected");
}
- public boolean ping() {
- try {
- return server.ping(sessionId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
+ class CallbackHandler implements InvokerCallbackHandler {
+ @Override
+ public void handleCallback(Callback callback) throws HandleCallbackException {
+ client.processCallback((ClientCallback)callback.getCallbackObject());
}
- return false;
}
-
+
+ class ClientConnectionListener implements ConnectionListener {
+ @Override
+ public void handleConnectionException(Throwable throwable, Client client) {
+ logger.info("connection to server lost - " + throwable.getMessage());
+ disconnect(true);
+ }
+ }
+
public boolean isConnected() {
- return sessionState == SessionState.CONNECTED;
+ if (callbackClient == null)
+ return false;
+ return callbackClient.isConnected();
}
public String[] getPlayerTypes() {
@@ -211,586 +238,623 @@ public class Session {
public UUID getMainRoomId() {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getMainRoomId();
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public UUID getRoomChatId(UUID roomId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getRoomChatId(roomId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public UUID getTableChatId(UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getTableChatId(tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public UUID getGameChatId(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getGameChatId(gameId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public TableView getTable(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getTable(roomId, tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public boolean watchTable(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.watchTable(sessionId, roomId, tableId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.joinTable(sessionId, roomId, tableId, playerName, playerType, skill, deckList);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (GameException ex) {
handleGameException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean joinTournamentTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.joinTournamentTable(sessionId, roomId, tableId, playerName, playerType, skill);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (GameException ex) {
handleGameException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public Collection getTables(UUID roomId) throws MageRemoteException {
- lock.readLock().lock();
+// lock.readLock().lock();
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getTables(roomId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- throw new MageRemoteException();
} catch (MageException ex) {
handleMageException(ex);
throw new MageRemoteException();
- } finally {
- lock.readLock().unlock();
+ } catch (Throwable t) {
+ handleThrowable(t);
+// } finally {
+// lock.readLock().unlock();
}
return null;
}
public Collection getConnectedPlayers(UUID roomId) throws MageRemoteException {
- lock.readLock().lock();
+// lock.readLock().lock();
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getConnectedPlayers(roomId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- throw new MageRemoteException();
} catch (MageException ex) {
handleMageException(ex);
throw new MageRemoteException();
- } finally {
- lock.readLock().unlock();
+ } catch (Throwable t) {
+ handleThrowable(t);
+// } finally {
+// lock.readLock().unlock();
}
return null;
}
public TournamentView getTournament(UUID tournamentId) throws MageRemoteException {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getTournament(tournamentId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- throw new MageRemoteException();
} catch (MageException ex) {
handleMageException(ex);
throw new MageRemoteException();
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public UUID getTournamentChatId(UUID tournamentId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.getTournamentChatId(tournamentId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public boolean sendPlayerUUID(UUID gameId, UUID data) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.sendPlayerUUID(gameId, sessionId, data);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean sendPlayerBoolean(UUID gameId, boolean data) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.sendPlayerBoolean(gameId, sessionId, data);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean sendPlayerInteger(UUID gameId, int data) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.sendPlayerInteger(gameId, sessionId, data);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean sendPlayerString(UUID gameId, String data) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.sendPlayerString(gameId, sessionId, data);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public DraftPickView sendCardPick(UUID draftId, UUID cardId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.sendCardPick(draftId, sessionId, cardId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public boolean joinChat(UUID chatId) {
try {
- if (sessionState == SessionState.CONNECTED) {
- server.joinChat(chatId, sessionId, userName);
+ if (isConnected()) {
+ server.joinChat(chatId, sessionId, connection.getUsername());
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean leaveChat(UUID chatId) {
- lock.readLock().lock();
+// lock.readLock().lock();
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.leaveChat(chatId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
- } finally {
- lock.readLock().unlock();
+ } catch (Throwable t) {
+ handleThrowable(t);
+// } finally {
+// lock.readLock().unlock();
}
return false;
}
public boolean sendChatMessage(UUID chatId, String message) {
- lock.readLock().lock();
+// lock.readLock().lock();
try {
- if (sessionState == SessionState.CONNECTED) {
- server.sendChatMessage(chatId, userName, message);
+ if (isConnected()) {
+ server.sendChatMessage(chatId, connection.getUsername(), message);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
- } finally {
- lock.readLock().unlock();
+ } catch (Throwable t) {
+ handleThrowable(t);
+// } finally {
+// lock.readLock().unlock();
}
return false;
}
public boolean joinGame(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.joinGame(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean joinDraft(UUID draftId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.joinDraft(draftId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean joinTournament(UUID tournamentId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.joinTournament(tournamentId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean watchGame(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.watchGame(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean replayGame(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.replayGame(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public TableView createTable(UUID roomId, MatchOptions matchOptions) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.createTable(sessionId, roomId, matchOptions);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public TableView createTournamentTable(UUID roomId, TournamentOptions tournamentOptions) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.createTournamentTable(sessionId, roomId, tournamentOptions);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return null;
}
public boolean isTableOwner(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.isTableOwner(sessionId, roomId, tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean removeTable(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.removeTable(sessionId, roomId, tableId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
+ }
+ return false;
+ }
+
+ public boolean removeTable(UUID tableId) {
+ try {
+ if (isConnected()) {
+ server.removeTable(sessionId, tableId);
+ return true;
+ }
+ } catch (MageException ex) {
+ handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean swapSeats(UUID roomId, UUID tableId, int seatNum1, int seatNum2) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.swapSeats(sessionId, roomId, tableId, seatNum1, seatNum2);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean leaveTable(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.leaveTable(sessionId, roomId, tableId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean startGame(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.startMatch(sessionId, roomId, tableId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean startTournament(UUID roomId, UUID tableId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.startTournament(sessionId, roomId, tableId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean startChallenge(UUID roomId, UUID tableId, UUID challengeId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.startChallenge(sessionId, roomId, tableId, challengeId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean submitDeck(UUID tableId, DeckCardLists deck) {
try {
- if (sessionState == SessionState.CONNECTED)
+ if (isConnected())
return server.submitDeck(sessionId, tableId, deck);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (GameException ex) {
handleGameException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean concedeGame(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.concedeGame(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean stopWatching(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.stopWatching(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean startReplay(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.startReplay(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean stopReplay(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.stopReplay(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean nextPlay(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.nextPlay(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean previousPlay(UUID gameId) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.previousPlay(gameId, sessionId);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
public boolean cheat(UUID gameId, UUID playerId, DeckCardLists deckList) {
try {
- if (sessionState == SessionState.CONNECTED) {
+ if (isConnected()) {
server.cheat(gameId, sessionId, playerId, deckList);
return true;
}
- } catch (RemoteException ex) {
- handleRemoteException(ex);
} catch (MageException ex) {
handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
}
return false;
}
- private void handleRemoteException(RemoteException ex) {
- logger.fatal("Communication error", ex);
+ public List getUsers() {
+ try {
+ if (isConnected())
+ return server.getUsers(sessionId);
+ } catch (MageException ex) {
+ handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
+ }
+ return null;
+ }
+
+ public boolean disconnectUser(String userSessionId) {
+ try {
+ if (isConnected()) {
+ server.disconnectUser(sessionId, userSessionId);
+ return true;
+ }
+ } catch (MageException ex) {
+ handleMageException(ex);
+ } catch (Throwable t) {
+ handleThrowable(t);
+ }
+ return false;
+ }
+
+ private void handleThrowable(Throwable t) {
+ logger.fatal("Communication error", t);
sessionState = SessionState.SERVER_UNAVAILABLE;
disconnect(true);
}
@@ -806,28 +870,9 @@ public class Session {
public String getUserName() {
- return userName;
+ return connection.getUsername();
}
- class ServerPinger implements Runnable {
-
- private int missed = 0;
-
- @Override
- public void run() {
- if (!ping()) {
- missed++;
- if (missed > 10) {
- logger.info("Connection to server timed out");
- disconnect(true);
- }
- }
- else {
- missed = 0;
- }
- }
-
- }
}
class MageAuthenticator extends Authenticator {
diff --git a/Mage.Common/src/mage/view/UserView.java b/Mage.Common/src/mage/view/UserView.java
index 73847d0127..cca7a1def0 100644
--- a/Mage.Common/src/mage/view/UserView.java
+++ b/Mage.Common/src/mage/view/UserView.java
@@ -39,10 +39,10 @@ public class UserView implements Serializable {
private String userName;
private String host;
- private UUID sessionId;
+ private String sessionId;
private Date timeConnected;
- public UserView(String userName, String host, UUID sessionId, Date timeConnected) {
+ public UserView(String userName, String host, String sessionId, Date timeConnected) {
this.userName = userName;
this.host = host;
this.sessionId = sessionId;
@@ -57,7 +57,7 @@ public class UserView implements Serializable {
return host;
}
- public UUID getSessionId() {
+ public String getSessionId() {
return sessionId;
}
diff --git a/Mage.Plugins/Mage.Card.Plugin/pom.xml b/Mage.Plugins/Mage.Card.Plugin/pom.xml
index e905c82823..9cbcfb5df5 100644
--- a/Mage.Plugins/Mage.Card.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Card.Plugin/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Plugins
- 0.7.4
+ 0.8.0
Mage-Card-Plugin
diff --git a/Mage.Plugins/Mage.Counter.Plugin/pom.xml b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
index 3fa40af077..32c8ba7d45 100644
--- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Plugins
- 0.7.4
+ 0.8.0
Mage-Counter-Plugin
diff --git a/Mage.Plugins/Mage.Rating.Plugin/pom.xml b/Mage.Plugins/Mage.Rating.Plugin/pom.xml
index 588006ec6a..6edc54fd58 100644
--- a/Mage.Plugins/Mage.Rating.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Rating.Plugin/pom.xml
@@ -6,7 +6,7 @@
org.mage
Mage-Plugins
- 0.7.4
+ 0.8.0
org.mage
diff --git a/Mage.Plugins/Mage.Theme.Plugin/pom.xml b/Mage.Plugins/Mage.Theme.Plugin/pom.xml
index 09cd9bba35..5e3cf64cb4 100644
--- a/Mage.Plugins/Mage.Theme.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Theme.Plugin/pom.xml
@@ -6,7 +6,7 @@
org.mage
Mage-Plugins
- 0.7.4
+ 0.8.0
Mage-Theme-Plugin
diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml
index 0bcccc68b8..a12b93a5c4 100644
--- a/Mage.Plugins/pom.xml
+++ b/Mage.Plugins/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage-Plugins
diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml
index ceb2243562..1d8e39775b 100644
--- a/Mage.Server.Console/pom.xml
+++ b/Mage.Server.Console/pom.xml
@@ -1,33 +1,34 @@
-
-
- 4.0.0
-
- mage-root
+
+
+ 4.0.0
+
+
+ org.mage
+ mage-root
+ 0.8.0
+
+
org.mage
- 0.7.4
-
- org.mage
- Mage.Server.Console
- 0.8
- Mage Server Console
- http://maven.apache.org
-
-
- junit
- junit
- 3.8.1
- test
-
-
- ${project.groupId}
- Mage-Common
- 0.7.4
-
-
- org.swinglabs
- swingx
- 1.6.1
-
-
+ Mage.Server.Console
+ jar
+ Mage Server Console
+
+
+
+ org.mage
+ Mage-Common
+ ${project.version}
+
+
+ org.swinglabs
+ swingx
+ 1.6.1
+
+
+ junit
+ junit
+ 4.8.2
+
+
diff --git a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.form b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.form
index 1ee8b0374f..a711e7a143 100644
--- a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.form
+++ b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.form
@@ -1,6 +1,6 @@
-
diff --git a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java
index 58a83b84fd..6b78bd83b6 100644
--- a/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java
+++ b/Mage.Server.Console/src/main/java/mage/server/console/ConnectDialog.java
@@ -39,10 +39,18 @@ import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.JDialog;
-import javax.swing.JFrame;
+
import javax.swing.JOptionPane;
+import javax.swing.SwingWorker;
+
+import mage.remote.Connection;
+import mage.remote.Connection.ProxyType;
import org.apache.log4j.Logger;
@@ -53,22 +61,26 @@ import org.apache.log4j.Logger;
public class ConnectDialog extends JDialog {
private final static Logger logger = Logger.getLogger(ConnectDialog.class);
-
private ConsoleFrame console;
+ private Connection connection;
+ private ConnectTask task;
/** Creates new form ConnectDialog */
public ConnectDialog() {
initComponents();
+ cbProxyType.setModel(new DefaultComboBoxModel(Connection.ProxyType.values()));
}
public void showDialog(ConsoleFrame console) {
this.console = console;
- this.txtServer.setText(ConsoleFrame.getPreferences().get("serverAddress", ""));
- this.txtPort.setText(ConsoleFrame.getPreferences().get("serverPort", ""));
+ this.txtServer.setText(ConsoleFrame.getPreferences().get("serverAddress", "localhost"));
+ this.txtPort.setText(ConsoleFrame.getPreferences().get("serverPort", Integer.toString(17171)));
this.chkAutoConnect.setSelected(Boolean.parseBoolean(ConsoleFrame.getPreferences().get("autoConnect", "false")));
- this.txtProxyServer.setText(ConsoleFrame.getPreferences().get("proxyAddress", ""));
- this.txtProxyPort.setText(ConsoleFrame.getPreferences().get("proxyPort", ""));
- this.chkUseProxy.setSelected(Boolean.parseBoolean(ConsoleFrame.getPreferences().get("useProxy", "false")));
+ this.txtProxyServer.setText(ConsoleFrame.getPreferences().get("proxyAddress", "localhost"));
+ this.txtProxyPort.setText(ConsoleFrame.getPreferences().get("proxyPort", Integer.toString(17171)));
+ this.cbProxyType.setSelectedItem(Connection.ProxyType.valueOf(ConsoleFrame.getPreferences().get("proxyType", "NONE").toUpperCase()));
+ this.txtProxyUserName.setText(ConsoleFrame.getPreferences().get("proxyUsername", ""));
+ this.txtPasswordField.setText(ConsoleFrame.getPreferences().get("proxyPassword", ""));
this.showProxySettings();
this.setModal(true);
this.setLocation(50, 50);
@@ -76,14 +88,22 @@ public class ConnectDialog extends JDialog {
}
private void showProxySettings() {
- if (chkUseProxy.isSelected()) {
+ if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) {
this.pnlProxy.setVisible(true);
+ this.pnlProxyAuth.setVisible(false);
+ this.pnlProxySettings.setVisible(true);
}
- else {
+ else if (cbProxyType.getSelectedItem() == Connection.ProxyType.HTTP) {
+ this.pnlProxy.setVisible(true);
+ this.pnlProxyAuth.setVisible(true);
+ this.pnlProxySettings.setVisible(true);
+ }
+ else if (cbProxyType.getSelectedItem() == Connection.ProxyType.NONE) {
this.pnlProxy.setVisible(false);
+ this.pnlProxyAuth.setVisible(false);
+ this.pnlProxySettings.setVisible(false);
}
this.pack();
-// this.revalidate();
this.repaint();
}
@@ -93,7 +113,11 @@ public class ConnectDialog extends JDialog {
ConsoleFrame.getPreferences().put("autoConnect", Boolean.toString(chkAutoConnect.isSelected()));
ConsoleFrame.getPreferences().put("proxyAddress", txtProxyServer.getText());
ConsoleFrame.getPreferences().put("proxyPort", txtProxyPort.getText());
- ConsoleFrame.getPreferences().put("useProxy", Boolean.toString(chkUseProxy.isSelected()));
+ ConsoleFrame.getPreferences().put("proxyType", cbProxyType.getSelectedItem().toString());
+ ConsoleFrame.getPreferences().put("proxyUsername", txtProxyUserName.getText());
+ char[] input = txtPasswordField.getPassword();
+ ConsoleFrame.getPreferences().put("proxyPassword", new String(input));
+ Arrays.fill(input, '0');
}
/** This method is called from within the constructor to
@@ -109,18 +133,26 @@ public class ConnectDialog extends JDialog {
lblServer = new javax.swing.JLabel();
lblPort = new javax.swing.JLabel();
txtPort = new javax.swing.JTextField();
- txtPassword = new javax.swing.JTextField();
- lblUserName = new javax.swing.JLabel();
btnConnect = new javax.swing.JButton();
btnCancel = new javax.swing.JButton();
chkAutoConnect = new javax.swing.JCheckBox();
- chkUseProxy = new javax.swing.JCheckBox();
+ jButton1 = new javax.swing.JButton();
+ cbProxyType = new javax.swing.JComboBox();
+ lblProxyType = new javax.swing.JLabel();
+ pnlProxySettings = new javax.swing.JPanel();
pnlProxy = new javax.swing.JPanel();
lblProxyServer = new javax.swing.JLabel();
txtProxyServer = new javax.swing.JTextField();
lblProxyPort = new javax.swing.JLabel();
txtProxyPort = new javax.swing.JTextField();
- jButton1 = new javax.swing.JButton();
+ pnlProxyAuth = new javax.swing.JPanel();
+ lblProxyUserName = new javax.swing.JLabel();
+ txtProxyUserName = new javax.swing.JTextField();
+ lblProxyPassword = new javax.swing.JLabel();
+ txtPasswordField = new javax.swing.JPasswordField();
+ lblPassword = new javax.swing.JLabel();
+ txtPassword = new javax.swing.JPasswordField();
+ lblStatus = new javax.swing.JLabel();
setTitle("Connect");
@@ -136,9 +168,6 @@ public class ConnectDialog extends JDialog {
}
});
- lblUserName.setLabelFor(txtPassword);
- lblUserName.setText("Password:");
-
btnConnect.setText("Connect");
btnConnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -160,17 +189,32 @@ public class ConnectDialog extends JDialog {
}
});
- chkUseProxy.setText("Use Proxy");
- chkUseProxy.addActionListener(new java.awt.event.ActionListener() {
+ jButton1.setText("Find...");
+ jButton1.setToolTipText("Find public server");
+ jButton1.setName("findServerBtn"); // NOI18N
+ jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- chkUseProxyActionPerformed(evt);
+ findPublicServerActionPerformed(evt);
}
});
- lblProxyServer.setLabelFor(txtServer);
+ cbProxyType.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cbProxyTypeActionPerformed(evt);
+ }
+ });
+
+ lblProxyType.setLabelFor(cbProxyType);
+ lblProxyType.setText("Proxy:");
+
+ pnlProxySettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+ pnlProxySettings.setMinimumSize(new java.awt.Dimension(0, 0));
+
+ lblProxyServer.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+ lblProxyServer.setLabelFor(txtProxyServer);
lblProxyServer.setText("Server:");
- lblProxyPort.setLabelFor(txtPort);
+ lblProxyPort.setLabelFor(txtProxyPort);
lblProxyPort.setText("Port:");
txtProxyPort.addKeyListener(new java.awt.event.KeyAdapter() {
@@ -186,36 +230,86 @@ public class ConnectDialog extends JDialog {
.addGroup(pnlProxyLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
- .addComponent(lblProxyPort)
- .addComponent(lblProxyServer))
+ .addComponent(lblProxyServer, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblProxyPort))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(txtProxyServer, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE))
- .addGap(30, 30, 30))
+ .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(txtProxyPort, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(txtProxyServer, javax.swing.GroupLayout.DEFAULT_SIZE, 334, Short.MAX_VALUE))
+ .addContainerGap())
);
pnlProxyLayout.setVerticalGroup(
pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlProxyLayout.createSequentialGroup()
- .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addContainerGap()
+ .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblProxyServer)
.addComponent(txtProxyServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(lblProxyPort)
- .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblProxyPort))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
- jButton1.setText("Find...");
- jButton1.setToolTipText("Find public server");
- jButton1.setName("findServerBtn"); // NOI18N
- jButton1.addActionListener(new java.awt.event.ActionListener() {
+ lblProxyUserName.setLabelFor(txtProxyUserName);
+ lblProxyUserName.setText("User Name:");
+
+ lblProxyPassword.setText("Password:");
+
+ txtPasswordField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- jButton1ActionPerformed(evt);
+ txtPasswordFieldActionPerformed(evt);
}
});
+ javax.swing.GroupLayout pnlProxyAuthLayout = new javax.swing.GroupLayout(pnlProxyAuth);
+ pnlProxyAuth.setLayout(pnlProxyAuthLayout);
+ pnlProxyAuthLayout.setHorizontalGroup(
+ pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxyAuthLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(lblProxyPassword)
+ .addComponent(lblProxyUserName))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(txtPasswordField, javax.swing.GroupLayout.DEFAULT_SIZE, 335, Short.MAX_VALUE)
+ .addComponent(txtProxyUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 335, Short.MAX_VALUE))
+ .addContainerGap())
+ );
+ pnlProxyAuthLayout.setVerticalGroup(
+ pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxyAuthLayout.createSequentialGroup()
+ .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(txtProxyUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblProxyUserName))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)
+ .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(txtPasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblProxyPassword))
+ .addContainerGap())
+ );
+
+ javax.swing.GroupLayout pnlProxySettingsLayout = new javax.swing.GroupLayout(pnlProxySettings);
+ pnlProxySettings.setLayout(pnlProxySettingsLayout);
+ pnlProxySettingsLayout.setHorizontalGroup(
+ pnlProxySettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(pnlProxyAuth, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(pnlProxy, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ );
+ pnlProxySettingsLayout.setVerticalGroup(
+ pnlProxySettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxySettingsLayout.createSequentialGroup()
+ .addComponent(pnlProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(pnlProxyAuth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
+ );
+
+ lblPassword.setLabelFor(txtPassword);
+ lblPassword.setText("Password:");
+
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
@@ -223,31 +317,36 @@ public class ConnectDialog extends JDialog {
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(lblStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 271, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnConnect)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnCancel))
+ .addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
+ .addComponent(lblProxyType)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(chkAutoConnect, javax.swing.GroupLayout.DEFAULT_SIZE, 383, Short.MAX_VALUE)
+ .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addGroup(layout.createSequentialGroup()
+ .addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(btnConnect)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnCancel))
+ .addComponent(lblPassword)
+ .addComponent(lblServer)
+ .addComponent(lblPort))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(txtPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
- .addComponent(lblPort)
- .addComponent(lblServer)
- .addComponent(lblUserName))
+ .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(131, 131, 131))
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(131, 131, 131))
- .addComponent(txtPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
- .addComponent(chkAutoConnect, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
- .addComponent(chkUseProxy, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 205, Short.MAX_VALUE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jButton1)))))
- .addContainerGap())
- .addComponent(pnlProxy, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+ .addComponent(jButton1)))))
+ .addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -262,19 +361,22 @@ public class ConnectDialog extends JDialog {
.addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblPort))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(lblUserName))
+ .addComponent(lblPassword))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chkAutoConnect)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(chkUseProxy)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblProxyType))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(pnlProxy, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnCancel)
- .addComponent(btnConnect))
+ .addComponent(btnConnect)
+ .addComponent(lblStatus))
.addContainerGap())
);
@@ -283,12 +385,15 @@ public class ConnectDialog extends JDialog {
private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed
ConsoleFrame.getPreferences().put("autoConnect", Boolean.toString(chkAutoConnect.isSelected()));
- this.setVisible(false);
+ if (task != null && !task.isDone())
+ task.cancel(true);
+ else
+ this.setVisible(false);
}//GEN-LAST:event_btnCancelActionPerformed
private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConnectActionPerformed
- if (txtPassword.getText().isEmpty()) {
+ if (txtPassword.getPassword().length == 0) {
JOptionPane.showMessageDialog(rootPane, "Please provide a password");
return;
}
@@ -302,31 +407,65 @@ public class ConnectDialog extends JDialog {
}
if (Integer.valueOf(txtPort.getText()) < 1 || Integer.valueOf(txtPort.getText()) > 65535 ) {
JOptionPane.showMessageDialog(rootPane, "Invalid port number");
- txtPort.setText(ConsoleFrame.getPreferences().get("serverPort", ""));
+ txtPort.setText(ConsoleFrame.getPreferences().get("serverPort", Integer.toString(17171)));
return;
}
- try {
- setCursor(new Cursor(Cursor.WAIT_CURSOR));
- if (chkUseProxy.isSelected()) {
- if (console.connect(txtPassword.getText(), txtServer.getText().trim(), Integer.valueOf(txtPort.getText()), txtProxyServer.getText().trim(), Integer.valueOf(txtProxyPort.getText()))) {
- this.saveSettings();
- this.setVisible(false);
- }
- }
- else {
- if (console.connect(txtPassword.getText(), txtServer.getText().trim(), Integer.valueOf(txtPort.getText()))) {
- this.saveSettings();
- this.setVisible(false);
- }
- }
- }
- finally {
- setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
- }
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ connection = new Connection();
+ connection.setHost(this.txtServer.getText());
+ connection.setPort(Integer.valueOf(this.txtPort.getText()));
+ connection.setPassword(new String(txtPassword.getPassword()));
+ connection.setProxyType((ProxyType) this.cbProxyType.getSelectedItem());
+ connection.setProxyHost(this.txtProxyServer.getText());
+ connection.setProxyPort(Integer.valueOf(this.txtProxyPort.getText()));
+ connection.setProxyUsername(this.txtProxyUserName.getText());
+ connection.setProxyPassword(new String(this.txtPasswordField.getPassword()));
+ logger.debug("connecting: " + connection.getProxyType() + " " + connection.getProxyHost() + " " + connection.getProxyPort());
+ task = new ConnectTask();
+ task.execute();
}//GEN-LAST:event_btnConnectActionPerformed
+ private class ConnectTask extends SwingWorker {
+
+ private boolean result = false;
+
+ @Override
+ protected Boolean doInBackground() throws Exception {
+ lblStatus.setText("Connecting...");
+ btnConnect.setEnabled(false);
+ result = console.connect(connection);
+ return result;
+ }
+
+ @Override
+ protected void done() {
+ try {
+ get();
+ setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ btnConnect.setEnabled(true);
+ if (result) {
+ lblStatus.setText("");
+ connected();
+ }
+ else {
+ lblStatus.setText("Could not connect");
+ }
+ } catch (InterruptedException ex) {
+ logger.fatal("Update Players Task error", ex);
+ } catch (ExecutionException ex) {
+ logger.fatal("Update Players Task error", ex);
+ } catch (CancellationException ex) {}
+ }
+ }
+
+ private void connected() {
+ this.saveSettings();
+ this.setVisible(false);
+ }
+
+
private void keyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_keyTyped
char c = evt.getKeyChar();
if (!Character.isDigit(c))
@@ -342,23 +481,19 @@ public class ConnectDialog extends JDialog {
// TODO add your handling code here:
}//GEN-LAST:event_txtProxyPortkeyTyped
- private void chkUseProxyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkUseProxyActionPerformed
- this.showProxySettings();
- }//GEN-LAST:event_chkUseProxyActionPerformed
-
- private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+ private void findPublicServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
BufferedReader in = null;
try {
URL serverListURL = new URL("http://mage.googlecode.com/files/server-list.txt");
in = new BufferedReader(new InputStreamReader(serverListURL.openStream()));
-
+
List servers = new ArrayList();
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Found server: "+inputLine);
servers.add(inputLine);
}
-
+
if (servers.size() == 0) {
JOptionPane.showMessageDialog(null, "Couldn't find any server.");
return;
@@ -384,26 +519,41 @@ public class ConnectDialog extends JDialog {
} finally {
if (in != null) try { in.close(); } catch (Exception e) {}
}
+ }//GEN-LAST:event_jButton1ActionPerformed
- }//GEN-LAST:event_jButton1ActionPerformed
+ private void cbProxyTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbProxyTypeActionPerformed
+ this.showProxySettings();
+ }//GEN-LAST:event_cbProxyTypeActionPerformed
+
+ private void txtPasswordFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPasswordFieldActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_txtPasswordFieldActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnConnect;
+ private javax.swing.JComboBox cbProxyType;
private javax.swing.JCheckBox chkAutoConnect;
- private javax.swing.JCheckBox chkUseProxy;
private javax.swing.JButton jButton1;
+ private javax.swing.JLabel lblPassword;
private javax.swing.JLabel lblPort;
+ private javax.swing.JLabel lblProxyPassword;
private javax.swing.JLabel lblProxyPort;
private javax.swing.JLabel lblProxyServer;
+ private javax.swing.JLabel lblProxyType;
+ private javax.swing.JLabel lblProxyUserName;
private javax.swing.JLabel lblServer;
- private javax.swing.JLabel lblUserName;
+ private javax.swing.JLabel lblStatus;
private javax.swing.JPanel pnlProxy;
- private javax.swing.JTextField txtPassword;
+ private javax.swing.JPanel pnlProxyAuth;
+ private javax.swing.JPanel pnlProxySettings;
+ private javax.swing.JPasswordField txtPassword;
+ private javax.swing.JPasswordField txtPasswordField;
private javax.swing.JTextField txtPort;
private javax.swing.JTextField txtProxyPort;
private javax.swing.JTextField txtProxyServer;
+ private javax.swing.JTextField txtProxyUserName;
private javax.swing.JTextField txtServer;
// End of variables declaration//GEN-END:variables
diff --git a/Mage.Server.Console/src/main/java/mage/server/console/ConsoleFrame.java b/Mage.Server.Console/src/main/java/mage/server/console/ConsoleFrame.java
index 546f509cc9..207db3c52d 100644
--- a/Mage.Server.Console/src/main/java/mage/server/console/ConsoleFrame.java
+++ b/Mage.Server.Console/src/main/java/mage/server/console/ConsoleFrame.java
@@ -34,11 +34,16 @@
package mage.server.console;
+import java.util.UUID;
import java.util.prefs.Preferences;
import javax.swing.Box;
import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
import javax.swing.UIManager;
-import mage.server.console.remote.Session;
+import mage.interfaces.MageClient;
+import mage.interfaces.callback.ClientCallback;
+import mage.remote.Connection;
+import mage.remote.Session;
import mage.utils.MageVersion;
import org.apache.log4j.Logger;
@@ -46,14 +51,14 @@ import org.apache.log4j.Logger;
*
* @author BetaSteward_at_googlemail.com
*/
-public class ConsoleFrame extends javax.swing.JFrame {
+public class ConsoleFrame extends javax.swing.JFrame implements MageClient {
private final static Logger logger = Logger.getLogger(ConsoleFrame.class);
private static Session session;
private ConnectDialog connectDialog;
private static Preferences prefs = Preferences.userNodeForPackage(ConsoleFrame.class);
- private final static MageVersion version = new MageVersion(0, 7, 4, "");
+ private final static MageVersion version = new MageVersion(0, 8, 0, "");
/**
* @return the session
@@ -66,7 +71,8 @@ public class ConsoleFrame extends javax.swing.JFrame {
return prefs;
}
- public static MageVersion getVersion() {
+ @Override
+ public MageVersion getVersion() {
return version;
}
@@ -82,16 +88,8 @@ public class ConsoleFrame extends javax.swing.JFrame {
}
}
- public boolean connect(String password, String serverName, int port) {
- if (session.connect(password, serverName, port)) {
- this.consolePanel1.start();
- return true;
- }
- return false;
- }
-
- public boolean connect(String password, String serverName, int port, String proxyServer, int proxyPort) {
- if (session.connect(password, serverName, port, proxyServer, proxyPort)) {
+ public boolean connect(Connection connection) {
+ if (session.connect(connection)) {
this.consolePanel1.start();
return true;
}
@@ -168,7 +166,7 @@ public class ConsoleFrame extends javax.swing.JFrame {
if (session.isConnected()) {
if (JOptionPane.showConfirmDialog(this, "Are you sure you want to disconnect?", "Confirm disconnect", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
this.consolePanel1.stop();
- session.disconnect();
+ session.disconnect(false);
}
} else {
connectDialog.showDialog(this);
@@ -185,6 +183,10 @@ public class ConsoleFrame extends javax.swing.JFrame {
}
});
}
+
+ private ConsoleFrame getFrame() {
+ return this;
+ }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnConnect;
@@ -193,4 +195,79 @@ public class ConsoleFrame extends javax.swing.JFrame {
private javax.swing.JLabel lblStatus;
// End of variables declaration//GEN-END:variables
+ @Override
+ public UUID getId() {
+ return null;
+ }
+
+ @Override
+ public void connected(final String message) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ setStatusText(message);
+ enableButtons();
+ }
+ else {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ setStatusText(message);
+ enableButtons();
+ }
+ });
+ }
+ }
+
+ @Override
+ public void disconnected() {
+ if (SwingUtilities.isEventDispatchThread()) {
+ consolePanel1.stop();
+ setStatusText("Not connected");
+ disableButtons();
+ }
+ else {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ consolePanel1.stop();
+ setStatusText("Not connected");
+ disableButtons();
+ }
+ });
+ }
+ }
+
+ @Override
+ public void showMessage(final String message) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ JOptionPane.showMessageDialog(this, message);
+ }
+ else {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ JOptionPane.showMessageDialog(getFrame(), message);
+ }
+ });
+ }
+ }
+
+ @Override
+ public void showError(final String message) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
+ }
+ else {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ JOptionPane.showMessageDialog(getFrame(), message, "Error", JOptionPane.ERROR_MESSAGE);
+ }
+ });
+ }
+ }
+
+ @Override
+ public void processCallback(ClientCallback callback) {
+ }
+
}
diff --git a/Mage.Server.Console/src/main/java/mage/server/console/ConsolePanel.java b/Mage.Server.Console/src/main/java/mage/server/console/ConsolePanel.java
index 1019fe330b..cc4aa69c8d 100644
--- a/Mage.Server.Console/src/main/java/mage/server/console/ConsolePanel.java
+++ b/Mage.Server.Console/src/main/java/mage/server/console/ConsolePanel.java
@@ -36,11 +36,14 @@ package mage.server.console;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
import javax.swing.SwingWorker;
import javax.swing.table.AbstractTableModel;
-import mage.server.console.remote.Session;
+import mage.remote.Session;
import mage.view.TableView;
import mage.view.UserView;
+import org.apache.log4j.Logger;
/**
*
@@ -48,6 +51,8 @@ import mage.view.UserView;
*/
public class ConsolePanel extends javax.swing.JPanel {
+ private final static Logger logger = Logger.getLogger(ConsolePanel.class);
+
private TableUserModel tableUserModel;
private TableTableModel tableTableModel;
private UpdateUsersTask updateUsersTask;
@@ -239,7 +244,7 @@ public class ConsolePanel extends javax.swing.JPanel {
private void btnDisconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDisconnectActionPerformed
int row = this.tblUsers.getSelectedRow();
- ConsoleFrame.getSession().disconnectUser((UUID)tableUserModel.getValueAt(row, 3));
+ ConsoleFrame.getSession().disconnectUser((String)tableUserModel.getValueAt(row, 3));
}//GEN-LAST:event_btnDisconnectActionPerformed
private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeleteActionPerformed
@@ -394,6 +399,8 @@ class UpdateUsersTask extends SwingWorker> {
private Session session;
private ConsolePanel panel;
+ private final static Logger logger = Logger.getLogger(UpdateUsersTask.class);
+
UpdateUsersTask(Session session, ConsolePanel panel) {
this.session = session;
this.panel = panel;
@@ -413,6 +420,16 @@ class UpdateUsersTask extends SwingWorker> {
panel.update(view.get(0));
}
+ @Override
+ protected void done() {
+ try {
+ get();
+ } catch (InterruptedException ex) {
+ logger.fatal("Update Users Task error", ex);
+ } catch (ExecutionException ex) {
+ logger.fatal("Update Users Task error", ex);
+ } catch (CancellationException ex) {}
+ }
}
class UpdateTablesTask extends SwingWorker> {
@@ -421,6 +438,8 @@ class UpdateTablesTask extends SwingWorker> {
private UUID roomId;
private ConsolePanel panel;
+ private final static Logger logger = Logger.getLogger(UpdateTablesTask.class);
+
UpdateTablesTask(Session session, UUID roomId, ConsolePanel panel) {
this.session = session;
this.roomId = roomId;
@@ -441,4 +460,14 @@ class UpdateTablesTask extends SwingWorker> {
panel.update(view.get(0));
}
+ @Override
+ protected void done() {
+ try {
+ get();
+ } catch (InterruptedException ex) {
+ logger.fatal("Update Tables Task error", ex);
+ } catch (ExecutionException ex) {
+ logger.fatal("Update Tables Task error", ex);
+ } catch (CancellationException ex) {}
+ }
}
\ No newline at end of file
diff --git a/Mage.Server.Console/src/main/java/mage/server/console/remote/Session.java b/Mage.Server.Console/src/main/java/mage/server/console/remote/Session.java
deleted file mode 100644
index 68409c4cf5..0000000000
--- a/Mage.Server.Console/src/main/java/mage/server/console/remote/Session.java
+++ /dev/null
@@ -1,732 +0,0 @@
-/*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice, this list of
-* conditions and the following disclaimer.
-*
-* 2. Redistributions in binary form must reproduce the above copyright notice, this list
-* of conditions and the following disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
-package mage.server.console.remote;
-
-import java.rmi.NotBoundException;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.util.Collection;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import javax.swing.JOptionPane;
-import mage.cards.decks.DeckCardLists;
-import mage.game.GameException;
-import mage.MageException;
-import mage.game.match.MatchOptions;
-import mage.game.tournament.TournamentOptions;
-import mage.interfaces.Server;
-import mage.interfaces.ServerState;
-import mage.server.console.ConsoleFrame;
-import mage.view.DraftPickView;
-import mage.view.GameTypeView;
-import mage.view.TableView;
-import mage.view.TournamentTypeView;
-import mage.view.TournamentView;
-import mage.view.UserView;
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author BetaSteward_at_googlemail.com
- */
-public class Session {
-
- private final static Logger logger = Logger.getLogger(Session.class);
- private static ScheduledExecutorService sessionExecutor = Executors.newScheduledThreadPool(1);
-
- private UUID sessionId;
- private Server server;
- private ConsoleFrame frame;
- private ServerState serverState;
- private ScheduledFuture> future;
-
- public Session(ConsoleFrame frame) {
- this.frame = frame;
- }
- public synchronized boolean connect(String password, String serverName, int port) {
- return connect(password, serverName, port, "", 0);
- }
-
- public synchronized boolean connect(String password, String serverName, int port, String proxyServer, int proxyPort) {
- if (isConnected()) {
- disconnect();
- }
- try {
- System.setSecurityManager(null);
- if (proxyServer.length() > 0) {
- System.setProperty("socksProxyHost", proxyServer);
- System.setProperty("socksProxyPort", Integer.toString(proxyPort));
- }
- else {
- System.clearProperty("socksProxyHost");
- System.clearProperty("socksProxyPort");
- }
- Registry reg = LocateRegistry.getRegistry(serverName, port);
- this.server = (Server) reg.lookup("mage-server");
- sessionId = server.registerAdmin(password, frame.getVersion());
- serverState = server.getServerState();
- future = sessionExecutor.scheduleWithFixedDelay(new ServerPinger(), 5, 5, TimeUnit.SECONDS);
- logger.info("Connected to RMI server at " + serverName + ":" + port);
- frame.setStatusText("Connected to " + serverName + ":" + port + " ");
- frame.enableButtons();
- return true;
- } catch (RemoteException ex) {
- logger.fatal("Unable to connect to server - ", ex);
- disconnect();
- JOptionPane.showMessageDialog(frame, "Unable to connect to server. " + ex.getMessage());
- } catch (NotBoundException ex) {
- logger.fatal("Unable to connect to server - ", ex);
- } catch (Exception ex) {
- logger.fatal("Unable to connect to server - ", ex);
- }
- return false;
- }
-
- public synchronized void disconnect() {
-
- if (isConnected()) {
- try {
- server.deregisterClient(sessionId);
- } catch (RemoteException ex) {
- logger.fatal("Error disconnecting ...", ex);
- } catch (MageException ex) {
- logger.fatal("Error disconnecting ...", ex);
- }
- removeServer();
- }
- }
-
- public void removeServer() {
- if (future != null && !future.isDone())
- future.cancel(true);
- server = null;
- frame.setStatusText("Not connected");
- frame.disableButtons();
- logger.info("Disconnected ... ");
- JOptionPane.showMessageDialog(frame, "Disconnected.", "Disconnected", JOptionPane.INFORMATION_MESSAGE);
- }
-
-// public void ack(int messageId) {
-// try {
-// server.ack(messageId, sessionId);
-// } catch (RemoteException ex) {
-// handleRemoteException(ex);
-// } catch (MageException ex) {
-// handleMageException(ex);
-// }
-// }
-
- public boolean ping() {
- try {
- return server.ping(sessionId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean isConnected() {
- return server != null;
- }
-
- public String[] getPlayerTypes() {
- return serverState.getPlayerTypes();
- }
-
- public List getGameTypes() {
- return serverState.getGameTypes();
- }
-
- public String[] getDeckTypes() {
- return serverState.getDeckTypes();
- }
-
- public List getTournamentTypes() {
- return serverState.getTournamentTypes();
- }
-
- public boolean isTestMode() {
- if (serverState != null)
- return serverState.isTestMode();
- return false;
- }
-
- public UUID getMainRoomId() {
- try {
- return server.getMainRoomId();
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public UUID getRoomChatId(UUID roomId) {
- try {
- return server.getRoomChatId(roomId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public UUID getTableChatId(UUID tableId) {
- try {
- return server.getTableChatId(tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public UUID getGameChatId(UUID gameId) {
- try {
- return server.getGameChatId(gameId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public TableView getTable(UUID roomId, UUID tableId) {
- try {
- return server.getTable(roomId, tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public boolean watchTable(UUID roomId, UUID tableId) {
- try {
- server.watchTable(sessionId, roomId, tableId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList) {
- try {
- return server.joinTable(sessionId, roomId, tableId, playerName, playerType, skill, deckList);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (GameException ex) {
- handleGameException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean joinTournamentTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill) {
- try {
- return server.joinTournamentTable(sessionId, roomId, tableId, playerName, playerType, skill);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (GameException ex) {
- handleGameException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public Collection getTables(UUID roomId) throws Exception {
- try {
- return server.getTables(roomId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- throw new Exception();
- } catch (MageException ex) {
- handleMageException(ex);
- throw new Exception();
- }
- }
-
- public TournamentView getTournament(UUID tournamentId) throws Exception {
- try {
- return server.getTournament(tournamentId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- throw new Exception();
- } catch (MageException ex) {
- handleMageException(ex);
- throw new Exception();
- }
- }
-
- public UUID getTournamentChatId(UUID tournamentId) {
- try {
- return server.getTournamentChatId(tournamentId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public boolean sendPlayerUUID(UUID gameId, UUID data) {
- try {
- server.sendPlayerUUID(gameId, sessionId, data);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean sendPlayerBoolean(UUID gameId, boolean data) {
- try {
- server.sendPlayerBoolean(gameId, sessionId, data);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean sendPlayerInteger(UUID gameId, int data) {
- try {
- server.sendPlayerInteger(gameId, sessionId, data);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean sendPlayerString(UUID gameId, String data) {
- try {
- server.sendPlayerString(gameId, sessionId, data);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public DraftPickView sendCardPick(UUID draftId, UUID cardId) {
- try {
- return server.sendCardPick(draftId, sessionId, cardId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public boolean leaveChat(UUID chatId) {
- try {
- server.leaveChat(chatId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean sendChatMessage(UUID chatId, String message) {
- try {
- server.sendChatMessage(chatId, "", message);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean joinGame(UUID gameId) {
- try {
- server.joinGame(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean joinDraft(UUID draftId) {
- try {
- server.joinDraft(draftId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean joinTournament(UUID tournamentId) {
- try {
- server.joinTournament(tournamentId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean watchGame(UUID gameId) {
- try {
- server.watchGame(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean replayGame(UUID gameId) {
- try {
- server.replayGame(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public TableView createTable(UUID roomId, MatchOptions matchOptions) {
- try {
- return server.createTable(sessionId, roomId, matchOptions);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public TableView createTournamentTable(UUID roomId, TournamentOptions tournamentOptions) {
- try {
- return server.createTournamentTable(sessionId, roomId, tournamentOptions);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public boolean isTableOwner(UUID roomId, UUID tableId) {
- try {
- return server.isTableOwner(sessionId, roomId, tableId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean removeTable(UUID tableId) {
- try {
- server.removeTable(sessionId, tableId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean swapSeats(UUID roomId, UUID tableId, int seatNum1, int seatNum2) {
- try {
- server.swapSeats(sessionId, roomId, tableId, seatNum1, seatNum2);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean leaveTable(UUID roomId, UUID tableId) {
- try {
- server.leaveTable(sessionId, roomId, tableId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean startGame(UUID roomId, UUID tableId) {
- try {
- server.startMatch(sessionId, roomId, tableId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean startTournament(UUID roomId, UUID tableId) {
- try {
- server.startTournament(sessionId, roomId, tableId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean startChallenge(UUID roomId, UUID tableId, UUID challengeId) {
- try {
- server.startChallenge(sessionId, roomId, tableId, challengeId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean submitDeck(UUID tableId, DeckCardLists deck) {
- try {
- return server.submitDeck(sessionId, tableId, deck);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (GameException ex) {
- handleGameException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean concedeGame(UUID gameId) {
- try {
- server.concedeGame(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean stopWatching(UUID gameId) {
- try {
- server.stopWatching(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean startReplay(UUID gameId) {
- try {
- server.startReplay(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean stopReplay(UUID gameId) {
- try {
- server.stopReplay(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean nextPlay(UUID gameId) {
- try {
- server.nextPlay(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean previousPlay(UUID gameId) {
- try {
- server.previousPlay(gameId, sessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public boolean cheat(UUID gameId, UUID playerId, DeckCardLists deckList) {
- try {
- server.cheat(gameId, sessionId, playerId, deckList);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- public List getUsers() {
- try {
- return server.getUsers(sessionId);
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return null;
- }
-
- public boolean disconnectUser(UUID userSessionId) {
- try {
- server.disconnectUser(sessionId, userSessionId);
- return true;
- } catch (RemoteException ex) {
- handleRemoteException(ex);
- } catch (MageException ex) {
- handleMageException(ex);
- }
- return false;
- }
-
- private void handleRemoteException(RemoteException ex) {
- logger.fatal("Communication error", ex);
- if (ex instanceof java.rmi.ConnectException) {
- server = null;
- frame.setStatusText("Not connected");
- frame.disableButtons();
- JOptionPane.showMessageDialog(frame, "Communication error - disconnecting.", "Error", JOptionPane.ERROR_MESSAGE);
- }
- else
- JOptionPane.showMessageDialog(frame, "Communication error.", "Error", JOptionPane.ERROR_MESSAGE);
- }
-
- private void handleMageException(MageException ex) {
- logger.fatal("Server error", ex);
- JOptionPane.showMessageDialog(frame, "Critical server error. Disconnecting", "Error", JOptionPane.ERROR_MESSAGE);
- disconnect();
- frame.disableButtons();
- }
-
- private void handleGameException(GameException ex) {
- logger.fatal("Game error", ex);
- JOptionPane.showMessageDialog(frame, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
- }
-
-
- public Server getServerRef() {
- return server;
- }
-
- class ServerPinger implements Runnable {
-
- private int missed = 0;
-
- @Override
- public void run() {
- if (!ping()) {
- missed++;
- if (missed > 10) {
- logger.info("Connection to server timed out");
- removeServer();
- }
- }
- else {
- missed = 0;
- }
- }
-
- }
-
-}
\ No newline at end of file
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
index b1b007f6c0..d391b0a4a2 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Deck-Constructed
diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
index c1d6e91b9b..50b83fd64c 100644
--- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Deck-Limited
diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
index ec3b8b88ed..00a0e4b14f 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Game-FreeForAll
diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
index 385da30a42..9b7da3a49b 100644
--- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Game-TwoPlayerDuel
diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
index 17824f0583..c21dc75666 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Player-AI-MA
diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
index 29c266cd52..a952fb32a4 100644
--- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Player-AI
diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
index 4470441f13..cdf59e9645 100644
--- a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Player-AIMinimax
diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
index 00d326f151..a353f013c4 100644
--- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Player-Human
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
index 7fd764e0b6..615b2fa5ed 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Tournament-BoosterDraft
diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
index 774bef03c8..aef71a4376 100644
--- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
@@ -7,7 +7,7 @@
org.mage
Mage-Server-Plugins
- 0.7.4
+ 0.8.0
Mage-Tournament-Sealed
diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml
index cbe329847a..54ad7d73b7 100644
--- a/Mage.Server.Plugins/pom.xml
+++ b/Mage.Server.Plugins/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage-Server-Plugins
diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml
index f4e9a77e33..a86f559402 100644
--- a/Mage.Server/pom.xml
+++ b/Mage.Server/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage-Server
@@ -39,8 +39,7 @@
jaxb-impl
2.1.12
-
-
+
log4j
log4j
1.2.14
diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java
index 55e2cc8fa5..e48219bdf4 100644
--- a/Mage.Server/src/main/java/mage/server/ChatManager.java
+++ b/Mage.Server/src/main/java/mage/server/ChatManager.java
@@ -54,12 +54,12 @@ public class ChatManager {
return chatSession.getChatId();
}
- public void joinChat(UUID chatId, UUID sessionId, String userName) {
- chatSessions.get(chatId).join(userName, sessionId);
+ public void joinChat(UUID chatId, UUID userId) {
+ chatSessions.get(chatId).join(userId);
}
- public void leaveChat(UUID chatId, UUID sessionId) {
- chatSessions.get(chatId).kill(sessionId);
+ public void leaveChat(UUID chatId, UUID userId) {
+ chatSessions.get(chatId).kill(userId);
}
public void destroyChatSession(UUID chatId) {
@@ -70,9 +70,27 @@ public class ChatManager {
chatSessions.get(chatId).broadcast(userName, message, color);
}
- void removeSession(UUID sessionId) {
+ /**
+ *
+ * use mainly for announcing that a user connection was lost or that a user has reconnected
+ *
+ * @param userId
+ * @param message
+ * @param color
+ */
+ public void broadcast(UUID userId, String message, MessageColor color) {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ for (ChatSession chat: chatSessions.values()) {
+ if (chat.hasUser(userId))
+ chat.broadcast(user.getName(), message, color);
+ }
+ }
+ }
+
+ void removeUser(UUID userId) {
for (ChatSession chat: chatSessions.values()) {
- chat.kill(sessionId);
+ chat.kill(userId);
}
}
}
diff --git a/Mage.Server/src/main/java/mage/server/ChatSession.java b/Mage.Server/src/main/java/mage/server/ChatSession.java
index 8ecc32714f..46b3018290 100644
--- a/Mage.Server/src/main/java/mage/server/ChatSession.java
+++ b/Mage.Server/src/main/java/mage/server/ChatSession.java
@@ -34,8 +34,6 @@ import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-import mage.MageException;
-import mage.interfaces.callback.CallbackException;
import mage.interfaces.callback.ClientCallback;
import mage.view.ChatMessage;
import mage.view.ChatMessage.MessageColor;
@@ -52,22 +50,24 @@ public class ChatSession {
private UUID chatId;
private DateFormat timeFormatter = SimpleDateFormat.getTimeInstance(SimpleDateFormat.SHORT);
- //TODO: use sessionId for chatting - prevents sending without being part of the chat
-
public ChatSession() {
chatId = UUID.randomUUID();
}
- public void join(String userName, UUID sessionId) {
- clients.put(sessionId, userName);
- broadcast(userName, " has joined", MessageColor.BLACK);
- logger.info(userName + " joined chat " + chatId);
+ public void join(UUID userId) {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ String userName = user.getName();
+ clients.put(userId, userName);
+ broadcast(userName, " has joined", MessageColor.BLACK);
+ logger.info(userName + " joined chat " + chatId);
+ }
}
- public void kill(UUID sessionId) {
- if (clients.containsKey(sessionId)) {
- String userName = clients.get(sessionId);
- clients.remove(sessionId);
+ public void kill(UUID userId) {
+ if (clients.containsKey(userId)) {
+ String userName = clients.get(userId);
+ clients.remove(userId);
broadcast(userName, " has left", MessageColor.BLACK);
logger.info(userName + " has left chat " + chatId);
}
@@ -79,12 +79,12 @@ public class ChatSession {
final String time = timeFormatter.format(cal.getTime());
final String username = userName;
logger.debug("Broadcasting '" + msg + "' for " + chatId);
- for (UUID sessionId: clients.keySet()) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null)
- session.fireCallback(new ClientCallback("chatMessage", chatId, new ChatMessage(username, msg, time, color)));
+ for (UUID userId: clients.keySet()) {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null)
+ user.fireCallback(new ClientCallback("chatMessage", chatId, new ChatMessage(username, msg, time, color)));
else
- kill(sessionId);
+ kill(userId);
}
}
@@ -95,4 +95,8 @@ public class ChatSession {
return chatId;
}
+ public boolean hasUser(UUID userId) {
+ return clients.containsKey(userId);
+ }
+
}
diff --git a/Mage.Server/src/main/java/mage/server/ServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java
similarity index 56%
rename from Mage.Server/src/main/java/mage/server/ServerImpl.java
rename to Mage.Server/src/main/java/mage/server/MageServerImpl.java
index be7798e799..bb7910a1f9 100644
--- a/Mage.Server/src/main/java/mage/server/ServerImpl.java
+++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java
@@ -28,12 +28,6 @@
package mage.server;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.rmi.server.ExportException;
-import java.rmi.server.RemoteServer;
-import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -43,9 +37,9 @@ import mage.cards.decks.DeckCardLists;
import mage.game.GameException;
import mage.game.match.MatchOptions;
import mage.game.tournament.TournamentOptions;
-import mage.interfaces.Server;
+import mage.interfaces.MageServer;
+//import mage.interfaces.Server;
import mage.interfaces.ServerState;
-import mage.interfaces.callback.ClientCallback;
import mage.server.game.DeckValidatorFactory;
import mage.server.draft.DraftManager;
import mage.server.game.GameFactory;
@@ -69,97 +63,52 @@ import org.apache.log4j.Logger;
*
* @author BetaSteward_at_googlemail.com
*/
-public class ServerImpl extends RemoteServer implements Server {
+public class MageServerImpl implements MageServer {
private final static Logger logger = Logger.getLogger("Mage Server");
- private static ExecutorService rmiExecutor = ThreadExecutor.getInstance().getRMIExecutor();
+ private static ExecutorService callExecutor = ThreadExecutor.getInstance().getCallExecutor();
- private boolean testMode;
private String password;
+ private boolean testMode;
+
+ public MageServerImpl(String password, boolean testMode) {
+ this.password = password;
+ this.testMode = testMode;
+ }
+
+ @Override
+ public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException {
- public ServerImpl(int port, String name, boolean testMode, String password) {
try {
- System.setSecurityManager(null);
- Registry reg = LocateRegistry.createRegistry(port);
- Server stub = (Server) UnicastRemoteObject.exportObject(this, port);
- reg.rebind(name, stub);
- this.testMode = testMode;
- this.password = password;
- logger.info("Started MAGE server - listening on port " + port);
- if (testMode)
- logger.info("MAGE server running in test mode");
- } catch (ExportException ex) {
- logger.fatal("ERROR: Unable to start Mage Server - another server is likely running");
- } catch (RemoteException ex) {
- logger.fatal("Failed to start RMI server at port " + port, ex);
- }
- }
-
- public boolean isTestMode() {
- return testMode;
- }
-
- @Override
- public ClientCallback callback(UUID sessionId) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session == null) {
- return null;
- }
- return session.callback();
- }
-
- @Override
- public void ack(String message, UUID sessionId) throws RemoteException, MageException {
- SessionManager.getInstance().getSession(sessionId).ack(message);
- }
-
- @Override
- public boolean ping(UUID sessionId) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.ping();
- return true;
+ if (version.compareTo(Main.getVersion()) != 0)
+ throw new MageException("Wrong client version " + version + ", expecting version " + Main.getVersion());
+ return SessionManager.getInstance().registerUser(sessionId, userName);
+ } catch (Exception ex) {
+ handleException(ex);
}
return false;
}
@Override
- public UUID registerClient(String userName, UUID clientId, MageVersion version) throws MageException, RemoteException {
-
- UUID sessionId = null;
- try {
- if (version.compareTo(Main.getVersion()) != 0)
- throw new MageException("Wrong client version " + version + ", expecting version " + Main.getVersion());
- sessionId = SessionManager.getInstance().createSession(userName, getClientHost(), clientId);
- logger.info("User " + userName + " connected from " + getClientHost());
- } catch (Exception ex) {
- handleException(ex);
- }
- return sessionId;
-
- }
-
- @Override
- public UUID registerAdmin(String password, MageVersion version) throws RemoteException, MageException {
- UUID sessionId = null;
+ public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException {
try {
if (version.compareTo(Main.getVersion()) != 0)
throw new MageException("Wrong client version " + version + ", expecting version " + Main.getVersion());
if (!password.equals(this.password))
throw new MageException("Wrong password");
- sessionId = SessionManager.getInstance().createSession(getClientHost());
- logger.info("Admin connected from " + getClientHost());
+ return SessionManager.getInstance().registerAdmin(sessionId);
} catch (Exception ex) {
handleException(ex);
}
- return sessionId;
+ return false;
}
@Override
- public TableView createTable(UUID sessionId, UUID roomId, MatchOptions options) throws MageException {
+ public TableView createTable(String sessionId, UUID roomId, MatchOptions options) throws MageException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTable(sessionId, options);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTable(userId, options);
logger.info("Table " + table.getTableId() + " created");
return table;
}
@@ -171,10 +120,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public TableView createTournamentTable(UUID sessionId, UUID roomId, TournamentOptions options) throws MageException {
+ public TableView createTournamentTable(String sessionId, UUID roomId, TournamentOptions options) throws MageException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(sessionId, options);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options);
logger.info("Tournament table " + table.getTableId() + " created");
return table;
}
@@ -186,14 +136,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void removeTable(final UUID sessionId, final UUID roomId, final UUID tableId) throws MageException {
+ public void removeTable(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().removeTable(sessionId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().removeTable(userId, tableId);
}
}
);
@@ -205,10 +156,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean joinTable(UUID sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException, GameException {
+ public boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException, GameException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(sessionId, tableId, name, playerType, skill, deckList);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList);
logger.info("Session " + sessionId + " joined table " + tableId);
return ret;
}
@@ -222,10 +174,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean joinTournamentTable(UUID sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill) throws MageException, GameException {
+ public boolean joinTournamentTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill) throws MageException, GameException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTournamentTable(sessionId, tableId, name, playerType, skill);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTournamentTable(userId, tableId, name, playerType, skill);
logger.info("Session " + sessionId + " joined table " + tableId);
return ret;
}
@@ -239,10 +192,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean submitDeck(UUID sessionId, UUID tableId, DeckCardLists deckList) throws MageException, GameException {
+ public boolean submitDeck(String sessionId, UUID tableId, DeckCardLists deckList) throws MageException, GameException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- boolean ret = TableManager.getInstance().submitDeck(sessionId, tableId, deckList);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList);
logger.info("Session " + sessionId + " submitted deck");
return ret;
}
@@ -270,8 +224,8 @@ public class ServerImpl extends RemoteServer implements Server {
public List getConnectedPlayers(UUID roomId) throws MageException {
try {
List players = new ArrayList();
- for (Session session : SessionManager.getInstance().getSessions().values()) {
- players.add(session.getUsername());
+ for (User user : UserManager.getInstance().getUsers()) {
+ players.add(user.getName());
}
return players;
}
@@ -293,17 +247,14 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void deregisterClient(final UUID sessionId) throws MageException {
+ public void deregisterClient(final String sessionId) throws MageException {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.kill();
- logger.info("Client deregistered ...");
- }
+ SessionManager.getInstance().disconnect(sessionId, true);
+ logger.info("Client deregistered ...");
}
}
);
@@ -314,14 +265,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void startMatch(final UUID sessionId, final UUID roomId, final UUID tableId) throws MageException {
+ public void startMatch(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().startMatch(sessionId, roomId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().startMatch(userId, roomId, tableId);
}
}
);
@@ -333,14 +285,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void startChallenge(final UUID sessionId, final UUID roomId, final UUID tableId, final UUID challengeId) throws RemoteException, MageException {
+ public void startChallenge(final String sessionId, final UUID roomId, final UUID tableId, final UUID challengeId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().startChallenge(sessionId, roomId, tableId, challengeId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().startChallenge(userId, roomId, tableId, challengeId);
}
}
);
@@ -352,14 +305,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void startTournament(final UUID sessionId, final UUID roomId, final UUID tableId) throws MageException {
+ public void startTournament(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().startTournament(sessionId, roomId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().startTournament(userId, roomId, tableId);
}
}
);
@@ -371,7 +325,7 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public TournamentView getTournament(UUID tournamentId) throws RemoteException, MageException {
+ public TournamentView getTournament(UUID tournamentId) throws MageException {
try {
return TournamentManager.getInstance().getTournamentView(tournamentId);
}
@@ -384,7 +338,7 @@ public class ServerImpl extends RemoteServer implements Server {
@Override
public void sendChatMessage(final UUID chatId, final String userName, final String message) throws MageException {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
@@ -399,13 +353,14 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void joinChat(final UUID chatId, final UUID sessionId, final String userName) throws MageException {
+ public void joinChat(final UUID chatId, final String sessionId, final String userName) throws MageException {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ChatManager.getInstance().joinChat(chatId, sessionId, userName);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ChatManager.getInstance().joinChat(chatId, userId);
}
}
);
@@ -416,13 +371,14 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void leaveChat(final UUID chatId, final UUID sessionId) throws MageException {
+ public void leaveChat(final UUID chatId, final String sessionId) throws MageException {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ChatManager.getInstance().leaveChat(chatId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ChatManager.getInstance().leaveChat(chatId, userId);
}
}
);
@@ -455,9 +411,10 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean isTableOwner(UUID sessionId, UUID roomId, UUID tableId) throws MageException {
+ public boolean isTableOwner(String sessionId, UUID roomId, UUID tableId) throws MageException {
try {
- return TableManager.getInstance().isTableOwner(tableId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ return TableManager.getInstance().isTableOwner(tableId, userId);
}
catch (Exception ex) {
handleException(ex);
@@ -466,14 +423,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void swapSeats(final UUID sessionId, final UUID roomId, final UUID tableId, final int seatNum1, final int seatNum2) throws RemoteException, MageException {
+ public void swapSeats(final String sessionId, final UUID roomId, final UUID tableId, final int seatNum1, final int seatNum2) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().swapSeats(tableId, sessionId, seatNum1, seatNum2);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().swapSeats(tableId, userId, seatNum1, seatNum2);
}
}
);
@@ -485,14 +443,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void leaveTable(final UUID sessionId, final UUID roomId, final UUID tableId) throws MageException {
+ public void leaveTable(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GamesRoomManager.getInstance().getRoom(roomId).leaveTable(sessionId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GamesRoomManager.getInstance().getRoom(roomId).leaveTable(userId, tableId);
}
}
);
@@ -515,14 +474,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void joinGame(final UUID gameId, final UUID sessionId) throws MageException {
+ public void joinGame(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().joinGame(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GameManager.getInstance().joinGame(gameId, userId);
}
}
);
@@ -534,14 +494,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void joinDraft(final UUID draftId, final UUID sessionId) throws MageException {
+ public void joinDraft(final UUID draftId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- DraftManager.getInstance().joinDraft(draftId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ DraftManager.getInstance().joinDraft(draftId, userId);
}
}
);
@@ -553,14 +514,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void joinTournament(final UUID tournamentId, final UUID sessionId) throws MageException {
+ public void joinTournament(final UUID tournamentId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TournamentManager.getInstance().joinTournament(tournamentId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TournamentManager.getInstance().joinTournament(tournamentId, userId);
}
}
);
@@ -594,14 +556,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void sendPlayerUUID(final UUID gameId, final UUID sessionId, final UUID data) throws MageException {
+ public void sendPlayerUUID(final UUID gameId, final String sessionId, final UUID data) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().sendPlayerUUID(gameId, sessionId, data);
+ User user = SessionManager.getInstance().getUser(sessionId);
+ user.sendPlayerUUID(gameId, data);
}
}
);
@@ -613,14 +576,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void sendPlayerString(final UUID gameId, final UUID sessionId, final String data) throws MageException {
+ public void sendPlayerString(final UUID gameId, final String sessionId, final String data) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().sendPlayerString(gameId, sessionId, data);
+ User user = SessionManager.getInstance().getUser(sessionId);
+ user.sendPlayerString(gameId, data);
}
}
);
@@ -632,14 +596,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void sendPlayerBoolean(final UUID gameId, final UUID sessionId, final Boolean data) throws MageException {
+ public void sendPlayerBoolean(final UUID gameId, final String sessionId, final Boolean data) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().sendPlayerBoolean(gameId, sessionId, data);
+ User user = SessionManager.getInstance().getUser(sessionId);
+ user.sendPlayerBoolean(gameId, data);
}
}
);
@@ -651,14 +616,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void sendPlayerInteger(final UUID gameId, final UUID sessionId, final Integer data) throws RemoteException, MageException {
+ public void sendPlayerInteger(final UUID gameId, final String sessionId, final Integer data) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().sendPlayerInteger(gameId, sessionId, data);
+ User user = SessionManager.getInstance().getUser(sessionId);
+ user.sendPlayerInteger(gameId, data);
}
}
);
@@ -670,10 +636,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public DraftPickView sendCardPick(final UUID draftId, final UUID sessionId, final UUID cardPick) throws MageException {
+ public DraftPickView sendCardPick(final UUID draftId, final String sessionId, final UUID cardPick) throws MageException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- return DraftManager.getInstance().sendCardPick(draftId, sessionId, cardPick);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ return DraftManager.getInstance().sendCardPick(draftId, userId, cardPick);
}
}
catch (Exception ex) {
@@ -683,14 +650,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void concedeGame(final UUID gameId, final UUID sessionId) throws MageException {
+ public void concedeGame(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().concedeGame(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GameManager.getInstance().concedeGame(gameId, userId);
}
}
);
@@ -702,10 +670,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean watchTable(UUID sessionId, UUID roomId, UUID tableId) throws MageException {
+ public boolean watchTable(String sessionId, UUID roomId, UUID tableId) throws MageException {
try {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- return GamesRoomManager.getInstance().getRoom(roomId).watchTable(sessionId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ return GamesRoomManager.getInstance().getRoom(roomId).watchTable(userId, tableId);
}
}
catch (Exception ex) {
@@ -715,14 +684,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void watchGame(final UUID gameId, final UUID sessionId) throws MageException {
+ public void watchGame(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().watchGame(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GameManager.getInstance().watchGame(gameId, userId);
}
}
);
@@ -734,14 +704,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void stopWatching(final UUID gameId, final UUID sessionId) throws MageException {
+ public void stopWatching(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().stopWatching(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GameManager.getInstance().stopWatching(gameId, userId);
}
}
);
@@ -753,14 +724,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void replayGame(final UUID gameId, final UUID sessionId) throws MageException {
+ public void replayGame(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ReplayManager.getInstance().replayGame(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ReplayManager.getInstance().replayGame(gameId, userId);
}
}
);
@@ -772,14 +744,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void startReplay(final UUID gameId, final UUID sessionId) throws MageException {
+ public void startReplay(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ReplayManager.getInstance().startReplay(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ReplayManager.getInstance().startReplay(gameId, userId);
}
}
);
@@ -791,14 +764,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void stopReplay(final UUID gameId, final UUID sessionId) throws MageException {
+ public void stopReplay(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ReplayManager.getInstance().stopReplay(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ReplayManager.getInstance().stopReplay(gameId, userId);
}
}
);
@@ -810,14 +784,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void nextPlay(final UUID gameId, final UUID sessionId) throws MageException {
+ public void nextPlay(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ReplayManager.getInstance().nextPlay(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ReplayManager.getInstance().nextPlay(gameId, userId);
}
}
);
@@ -829,14 +804,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void previousPlay(final UUID gameId, final UUID sessionId) throws MageException {
+ public void previousPlay(final UUID gameId, final String sessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- ReplayManager.getInstance().previousPlay(gameId, sessionId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ ReplayManager.getInstance().previousPlay(gameId, userId);
}
}
);
@@ -848,7 +824,7 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public ServerState getServerState() throws RemoteException, MageException {
+ public ServerState getServerState() throws MageException {
try {
return new ServerState(
GameFactory.getInstance().getGameTypes(),
@@ -865,15 +841,17 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void cheat(final UUID gameId, final UUID sessionId, final UUID playerId, final DeckCardLists deckList) throws MageException {
+ public void cheat(final UUID gameId, final String sessionId, final UUID playerId, final DeckCardLists deckList) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- if (testMode)
- GameManager.getInstance().cheat(gameId, sessionId, playerId, deckList);
+ if (testMode) {
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ GameManager.getInstance().cheat(gameId, userId, playerId, deckList);
+ }
}
}
);
@@ -885,10 +863,11 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public boolean cheat(final UUID gameId, final UUID sessionId, final UUID playerId, final String cardName) throws MageException {
+ public boolean cheat(final UUID gameId, final String sessionId, final UUID playerId, final String cardName) throws MageException {
if (testMode) {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- return GameManager.getInstance().cheat(gameId, sessionId, playerId, cardName);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ return GameManager.getInstance().cheat(gameId, userId, playerId, cardName);
}
}
return false;
@@ -900,26 +879,31 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public GameView getGameView(final UUID gameId, final UUID sessionId, final UUID playerId) {
+ public GameView getGameView(final UUID gameId, final String sessionId, final UUID playerId) {
if (SessionManager.getInstance().isValidSession(sessionId)) {
- return GameManager.getInstance().getGameView(gameId, sessionId, playerId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ return GameManager.getInstance().getGameView(gameId, userId, playerId);
}
return null;
}
@Override
- public List getUsers(UUID sessionId) throws RemoteException, MageException {
- if (SessionManager.getInstance().isValidSession(sessionId)) {
- return SessionManager.getInstance().getUsers(sessionId);
+ public List getUsers(String sessionId) throws MageException {
+ if (SessionManager.getInstance().isValidSession(sessionId) && SessionManager.getInstance().isAdmin(sessionId)) {
+ List users = new ArrayList();
+ for (User user: UserManager.getInstance().getUsers()) {
+ users.add(new UserView(user.getName(), "", user.getSessionId(), user.getConnectionTime()));
+ }
+ return users;
}
return null;
}
@Override
- public void disconnectUser(final UUID sessionId, final UUID userSessionId) throws RemoteException, MageException {
+ public void disconnectUser(final String sessionId, final String userSessionId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
@@ -935,14 +919,15 @@ public class ServerImpl extends RemoteServer implements Server {
}
@Override
- public void removeTable(final UUID sessionId, final UUID tableId) throws RemoteException, MageException {
+ public void removeTable(final String sessionId, final UUID tableId) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
- rmiExecutor.execute(
+ callExecutor.execute(
new Runnable() {
@Override
public void run() {
- TableManager.getInstance().removeTable(sessionId, tableId);
+ UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
+ TableManager.getInstance().removeTable(userId, tableId);
}
}
);
diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java
index ba2a1aa2b7..7437c6fe27 100644
--- a/Mage.Server/src/main/java/mage/server/Main.java
+++ b/Mage.Server/src/main/java/mage/server/Main.java
@@ -31,14 +31,14 @@ package mage.server;
import mage.server.util.PluginClassLoader;
import java.io.File;
import java.io.FilenameFilter;
-import java.net.Inet4Address;
+import java.io.IOException;
import java.net.InetAddress;
-import java.net.InterfaceAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.Enumeration;
+import java.util.Map;
+import javax.management.MBeanServer;
import mage.game.match.MatchType;
import mage.game.tournament.TournamentType;
+import mage.interfaces.MageServer;
+import mage.remote.Connection;
import mage.server.game.DeckValidatorFactory;
import mage.server.game.GameFactory;
import mage.server.game.PlayerFactory;
@@ -46,9 +46,21 @@ import mage.server.tournament.TournamentFactory;
import mage.server.util.ConfigSettings;
import mage.server.util.config.Plugin;
import mage.server.util.config.GamePlugin;
-import mage.util.Copier;
import mage.utils.MageVersion;
import org.apache.log4j.Logger;
+import org.jboss.remoting.Client;
+import org.jboss.remoting.ClientDisconnectedException;
+import org.jboss.remoting.ConnectionListener;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.Remoting;
+import org.jboss.remoting.ServerInvocationHandler;
+import org.jboss.remoting.ServerInvoker;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
+import org.jboss.remoting.transport.Connector;
+import org.jboss.remoting.transporter.TransporterServer;
+import org.w3c.dom.Element;
/**
*
@@ -61,11 +73,11 @@ public class Main {
private final static String testModeArg = "-testMode=";
private final static String adminPasswordArg = "-adminPassword=";
private final static String pluginFolder = "plugins";
- private static MageVersion version = new MageVersion(0, 7, 4, "");
+ private static MageVersion version = new MageVersion(0, 8, 0, "");
public static PluginClassLoader classLoader = new PluginClassLoader();
- public static ServerImpl server;
-
+ public static TransporterServer server;
+ protected static boolean testMode;
/**
* @param args the command line arguments
*/
@@ -87,7 +99,6 @@ public class Main {
for (Plugin plugin: config.getDeckTypes()) {
DeckValidatorFactory.getInstance().addDeckType(plugin.getName(), loadPlugin(plugin));
}
- boolean testMode = false;
String adminPassword = "";
for (String arg: args) {
if (arg.startsWith(testModeArg)) {
@@ -97,44 +108,105 @@ public class Main {
adminPassword = arg.replace(adminPasswordArg, "");
}
}
- Copier.setLoader(classLoader);
- setServerAddress(config.getServerAddress());
- server = new ServerImpl(config.getPort(), config.getServerName(), testMode, adminPassword);
+ Connection connection = new Connection();
+ connection.setHost(config.getServerAddress());
+ connection.setPort(config.getPort());
+ try {
+ InvokerLocator serverLocator = new InvokerLocator(connection.getURI());
+ server = new MageTransporterServer(serverLocator, new MageServerImpl(adminPassword, testMode), MageServer.class.getName(), new MageServerInvocationHandler());
+ server.start();
+ logger.info("Started MAGE server - listening on " + connection.toString());
+ if (testMode)
+ logger.info("MAGE server running in test mode");
+ } catch (IOException ex) {
+ logger.fatal("Failed to start server - " + connection.toString(), ex);
+ } catch (Exception ex) {
+ logger.fatal("Failed to start server - " + connection.toString(), ex);
+ }
}
- private static void setServerAddress(String ip) {
- String ipParam = System.getProperty("server");
- if (ipParam != null) {
- ip = ipParam;
- }
- if (ip.equals("localhost")) {
- try {
- String foundIP = "";
- for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) {
- NetworkInterface iface = interfaces.nextElement( );
- if (iface.isLoopback())
- continue;
- for (InterfaceAddress addr: iface.getInterfaceAddresses())
- {
- InetAddress iaddr = addr.getAddress();
- if (iaddr instanceof Inet4Address) {
- foundIP = iaddr.getHostAddress();
- break;
- }
- }
- if (foundIP.length() > 0)
- break;
+ static class ClientConnectionListener implements ConnectionListener {
+ @Override
+ public void handleConnectionException(Throwable throwable, Client client) {
+ Session session = SessionManager.getInstance().getSession(client.getSessionId());
+ if (session != null) {
+ String sessionName;
+ User user = UserManager.getInstance().getUser(session.getUserId());
+ if (user != null)
+ sessionName = user.getName() + " at " + session.getHost();
+ else
+ sessionName = session.getHost();
+ if (throwable instanceof ClientDisconnectedException) {
+ SessionManager.getInstance().disconnect(client.getSessionId(), true);
+ logger.info("client disconnected - " + sessionName);
+ }
+ else {
+ SessionManager.getInstance().disconnect(client.getSessionId(), false);
+ logger.info("connection to client lost - " + sessionName);
}
- if (foundIP.length() > 0)
- ip = foundIP;
- } catch (SocketException ex) {
- logger.warn("Could not get server address: ", ex);
}
}
- System.setProperty("java.rmi.server.hostname", ip);
- System.setProperty("sun.rmi.transport.tcp.readTimeout", "30000");
- logger.info("MAGE server - using address " + ip);
+ }
+
+ static class MageTransporterServer extends TransporterServer {
+
+ protected Connector connector;
+
+ public MageTransporterServer(InvokerLocator locator, Object target, String subsystem, MageServerInvocationHandler callback) throws Exception {
+ super(locator, target, subsystem);
+ connector.addInvocationHandler("callback", callback);
+ connector.setLeasePeriod(5000);
+ connector.addConnectionListener(new ClientConnectionListener());
+ }
+
+ public Connector getConnector() throws Exception {
+ return connector;
+ }
+
+ @Override
+ protected Connector getConnector(InvokerLocator locator, Map config, Element xmlConfig) throws Exception {
+ Connector c = super.getConnector(locator, config, xmlConfig);
+ this.connector = c;
+ return c;
+ }
+ }
+
+ static class MageServerInvocationHandler implements ServerInvocationHandler {
+
+ @Override
+ public void setMBeanServer(MBeanServer server) {}
+
+ @Override
+ public void setInvoker(ServerInvoker invoker) {}
+
+ @Override
+ public Object invoke(final InvocationRequest invocation) throws Throwable {
+ String sessionId = invocation.getSessionId();
+ InetAddress clientAddress = (InetAddress) invocation.getRequestPayload().get(Remoting.CLIENT_ADDRESS);
+ SessionManager.getInstance().getSession(sessionId).setHost(clientAddress.getHostAddress());
+ return null;
+ }
+
+ @Override
+ public void addListener(InvokerCallbackHandler callbackHandler) {
+ ServerInvokerCallbackHandler handler = (ServerInvokerCallbackHandler) callbackHandler;
+ try {
+ String sessionId = handler.getClientSessionId();
+ SessionManager.getInstance().createSession(sessionId, callbackHandler);
+ } catch (Throwable ex) {
+ logger.fatal("", ex);
+ }
+ }
+
+ @Override
+ public void removeListener(InvokerCallbackHandler callbackHandler) {
+ logger.fatal("removeListener called");
+// ServerInvokerCallbackHandler handler = (ServerInvokerCallbackHandler) callbackHandler;
+// String sessionId = handler.getCallbackClient().getSessionId();
+// SessionManager.getInstance().disconnect(sessionId);
+ }
+
}
private static Class> loadPlugin(Plugin plugin) {
@@ -198,4 +270,7 @@ public class Main {
return version;
}
+ public static boolean isTestMode() {
+ return testMode;
+ }
}
diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java
index 58d745549a..0f99984258 100644
--- a/Mage.Server/src/main/java/mage/server/Session.java
+++ b/Mage.Server/src/main/java/mage/server/Session.java
@@ -30,12 +30,13 @@ package mage.server;
import java.util.Date;
import java.util.UUID;
-import mage.cards.decks.Deck;
-import mage.interfaces.callback.CallbackServerSession;
+import mage.MageException;
import mage.interfaces.callback.ClientCallback;
-import mage.server.game.GameManager;
-import mage.view.TableClientMessage;
import org.apache.log4j.Logger;
+import org.jboss.remoting.callback.AsynchInvokerCallbackHandler;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
/**
*
@@ -45,124 +46,73 @@ public class Session {
private final static Logger logger = Logger.getLogger(Session.class);
- private UUID sessionId;
- private UUID clientId;
- private String username;
+ private String sessionId;
+ private UUID userId;
private String host;
private int messageId = 0;
- private String ackMessage;
private Date timeConnected;
- private long lastPing;
private boolean isAdmin = false;
- private final CallbackServerSession callback = new CallbackServerSession();
+ private AsynchInvokerCallbackHandler callbackHandler;
- public Session(String userName, String host, UUID clientId) {
- sessionId = UUID.randomUUID();
- this.username = userName;
- this.host = host;
- this.clientId = clientId;
+ public Session(String sessionId, InvokerCallbackHandler callbackHandler) {
+ this.sessionId = sessionId;
+ this.callbackHandler = (AsynchInvokerCallbackHandler) callbackHandler;
this.isAdmin = false;
this.timeConnected = new Date();
- ping();
}
-
- public Session(String host) {
- sessionId = UUID.randomUUID();
- this.username = "Admin";
- this.host = host;
+
+ public void registerUser(String userName) throws MageException {
+ this.isAdmin = false;
+ if (userName.equals("Admin"))
+ throw new MageException("User name already in use");
+ User user = UserManager.getInstance().createUser(userName, host);
+ if (user == null) { // user already exists
+ user = UserManager.getInstance().findUser(userName);
+ if (user.getHost().equals(host)) {
+ if (user.getSessionId().isEmpty())
+ logger.info("Reconnecting session for " + userName);
+ else
+ throw new MageException("This machine is already connected");
+ }
+ else {
+ throw new MageException("User name already in use");
+ }
+ }
+ if (!UserManager.getInstance().connectToSession(sessionId, user.getId()))
+ throw new MageException("Error connecting");
+ this.userId = user.getId();
+ }
+
+ public void registerAdmin() {
this.isAdmin = true;
- this.timeConnected = new Date();
- ping();
+ User user = UserManager.getInstance().createUser("Admin", host);
+ this.userId = user.getId();
}
-
- public UUID getId() {
+
+ public String getId() {
return sessionId;
}
-
- public UUID getClientId() {
- return clientId;
+
+ public void disconnect() {
+ UserManager.getInstance().disconnect(userId);
}
-
+
public void kill() {
- callback.destroy();
- SessionManager.getInstance().removeSession(sessionId);
- TableManager.getInstance().removeSession(sessionId);
- GameManager.getInstance().removeSession(sessionId);
- ChatManager.getInstance().removeSession(sessionId);
+ UserManager.getInstance().removeUser(userId);
}
-
- public ClientCallback callback() {
+
+ synchronized void fireCallback(final ClientCallback call) {
try {
- return callback.callback();
- } catch (InterruptedException ex) {
- logger.fatal("Session callback error", ex);
- }
- return null;
- }
-
- public synchronized void fireCallback(final ClientCallback call) {
- call.setMessageId(messageId++);
- if (logger.isDebugEnabled())
- logger.debug(sessionId + " - " + call.getMessageId() + " - " + call.getMethod());
- try {
- callback.setCallback(call);
- } catch (InterruptedException ex) {
+ call.setMessageId(messageId++);
+ callbackHandler.handleCallbackOneway(new Callback(call));
+ } catch (HandleCallbackException ex) {
logger.fatal("Session fireCallback error", ex);
+ disconnect();
}
}
- public void gameStarted(final UUID gameId, final UUID playerId) {
- fireCallback(new ClientCallback("startGame", gameId, new TableClientMessage(gameId, playerId)));
- }
-
- public void draftStarted(final UUID draftId, final UUID playerId) {
- fireCallback(new ClientCallback("startDraft", draftId, new TableClientMessage(draftId, playerId)));
- }
-
- public void tournamentStarted(final UUID tournamentId, final UUID playerId) {
- fireCallback(new ClientCallback("startTournament", tournamentId, new TableClientMessage(tournamentId, playerId)));
- }
-
- public void sideboard(final Deck deck, final UUID tableId, final int time) {
- fireCallback(new ClientCallback("sideboard", tableId, new TableClientMessage(deck, tableId, time)));
- }
-
- public void construct(final Deck deck, final UUID tableId, final int time) {
- fireCallback(new ClientCallback("construct", tableId, new TableClientMessage(deck, tableId, time)));
- }
-
- public void watchGame(final UUID gameId) {
- fireCallback(new ClientCallback("watchGame", gameId));
- }
-
- public void replayGame(final UUID gameId) {
- fireCallback(new ClientCallback("replayGame", gameId));
- }
-
- public void ack(String message) {
- this.ackMessage = message;
- }
-
- public String getAckMessage() {
- return ackMessage;
- }
-
- public void clearAck() {
- this.ackMessage = "";
- }
-
- public String getUsername() {
- return username;
- }
-
- public void ping() {
- this.lastPing = System.currentTimeMillis();
- if (logger.isTraceEnabled())
- logger.trace("Ping received from" + username + ":" + sessionId);
- }
-
- public boolean stillAlive() {
- return (System.currentTimeMillis() - lastPing) < 60000;
+ public UUID getUserId() {
+ return userId;
}
public boolean isAdmin() {
@@ -176,4 +126,8 @@ public class Session {
public Date getConnectionTime() {
return timeConnected;
}
+
+ void setHost(String hostAddress) {
+ this.host = hostAddress;
+ }
}
diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManager.java
index 76b661910a..d6cf60c40b 100644
--- a/Mage.Server/src/main/java/mage/server/SessionManager.java
+++ b/Mage.Server/src/main/java/mage/server/SessionManager.java
@@ -28,18 +28,13 @@
package mage.server;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
import mage.MageException;
-import mage.view.UserView;
import org.apache.log4j.Logger;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
/**
*
@@ -49,92 +44,69 @@ public class SessionManager {
private final static Logger logger = Logger.getLogger(SessionManager.class);
private final static SessionManager INSTANCE = new SessionManager();
- private static ScheduledExecutorService sessionExecutor;
public static SessionManager getInstance() {
return INSTANCE;
}
- protected SessionManager() {
- sessionExecutor = Executors.newScheduledThreadPool(1);
- sessionExecutor.scheduleWithFixedDelay(new SessionChecker(), 30, 10, TimeUnit.SECONDS);
- }
+ private ConcurrentHashMap sessions = new ConcurrentHashMap();
- private ConcurrentHashMap sessions = new ConcurrentHashMap();
-
- public Session getSession(UUID sessionId) {
+ public Session getSession(String sessionId) {
if (sessions == null || sessionId == null) return null;
return sessions.get(sessionId);
}
- public UUID createSession(String userName, String host, UUID clientId) throws MageException {
- for (Session session: sessions.values()) {
- if (session.getUsername().equals(userName)) {
- if (session.getClientId().equals(clientId)) {
- logger.info("Reconnecting session " + session.getId() + " for " + userName);
- return session.getId();
- }
- else {
- throw new MageException("User name already in use");
- }
- }
+ public void createSession(String sessionId, InvokerCallbackHandler callbackHandler) {
+ Session session = new Session(sessionId, callbackHandler);
+ sessions.put(sessionId, session);
+ }
+
+ public boolean registerUser(String sessionId, String userName) throws MageException {
+ Session session = sessions.get(sessionId);
+ if (session != null) {
+ session.registerUser(userName);
+ logger.info("User " + userName + " connected from " + session.getHost());
+ return true;
}
- Session session = new Session(userName, host, clientId);
- sessions.put(session.getId(), session);
- logger.info("Session " + session.getId() + " created for user " + userName);
- return session.getId();
+ return false;
}
-
- public UUID createSession(String host) throws MageException {
- Session session = new Session(host);
- sessions.put(session.getId(), session);
- logger.info("Admin session created");
- return session.getId();
+
+ public boolean registerAdmin(String sessionId) {
+ Session session = sessions.get(sessionId);
+ if (session != null) {
+ session.registerAdmin();
+ logger.info("Admin connected from " + session.getHost());
+ return true;
+ }
+ return false;
}
-
- public void removeSession(UUID sessionId) {
- sessions.remove(sessionId);
- }
-
- public void checkSessions() {
- logger.trace("Checking sessions");
- for (Session session: sessions.values()) {
- if (!session.stillAlive()) {
- logger.info("Client for user " + session.getUsername() + ":" + session.getId() + " timed out - releasing resources");
+
+ public synchronized void disconnect(String sessionId, boolean voluntary) {
+ Session session = sessions.get(sessionId);
+ if (session != null) {
+ if (voluntary)
session.kill();
- }
+ else
+ session.disconnect();
+ sessions.remove(sessionId);
}
}
- public Map getSessions() {
- Map map = new HashMap();
- for (Map.Entry entry : sessions.entrySet()) {
+ public Map getSessions() {
+ Map map = new HashMap();
+ for (Map.Entry entry : sessions.entrySet()) {
map.put(entry.getKey(), entry.getValue());
}
return map;
}
- List getUsers(UUID sessionId) {
- List users = new ArrayList();
- Session admin = sessions.get(sessionId);
- if (admin != null && admin.isAdmin()) {
- for (Session session: sessions.values()) {
- users.add(new UserView(session.getUsername(), session.getHost(), session.getId(), session.getConnectionTime()));
- }
- }
- return users;
- }
-
- public void disconnectUser(UUID sessionId, UUID userSessionId) {
+ public void disconnectUser(String sessionId, String userSessionId) {
if (isAdmin(sessionId)) {
- Session session = sessions.get(userSessionId);
- if (session != null) {
- session.kill();
- }
+ disconnect(userSessionId, true);
}
}
- public boolean isAdmin(UUID sessionId) {
+ public boolean isAdmin(String sessionId) {
Session admin = sessions.get(sessionId);
if (admin != null) {
return admin.isAdmin();
@@ -142,19 +114,16 @@ public class SessionManager {
return false;
}
- public boolean isValidSession(UUID sessionId) {
+ public boolean isValidSession(String sessionId) {
if (sessions.containsKey(sessionId))
return true;
return false;
}
- class SessionChecker implements Runnable {
-
- @Override
- public void run() {
- checkSessions();
+ public User getUser(String sessionId) {
+ if (sessions.containsKey(sessionId)) {
+ return UserManager.getInstance().getUser(sessions.get(sessionId).getUserId());
}
-
+ return null;
}
-
}
diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java
index 59855cd257..a16c773853 100644
--- a/Mage.Server/src/main/java/mage/server/TableController.java
+++ b/Mage.Server/src/main/java/mage/server/TableController.java
@@ -28,7 +28,6 @@
package mage.server;
-import java.util.logging.Level;
import mage.Constants.RangeOfInfluence;
import mage.Constants.TableState;
import mage.cards.decks.Deck;
@@ -67,36 +66,38 @@ public class TableController {
private final static Logger logger = Logger.getLogger(TableController.class);
- private UUID sessionId;
+ private UUID userId;
private UUID chatId;
private String controllerName;
private Table table;
private Match match;
private MatchOptions options;
private Tournament tournament;
- private ConcurrentHashMap sessionPlayerMap = new ConcurrentHashMap();
+ private ConcurrentHashMap userPlayerMap = new ConcurrentHashMap();
- public TableController(UUID roomId, UUID sessionId, MatchOptions options) {
- this.sessionId = sessionId;
+ public TableController(UUID roomId, UUID userId, MatchOptions options) {
+ this.userId = userId;
chatId = ChatManager.getInstance().createChatSession();
this.options = options;
match = GameFactory.getInstance().createMatch(options.getGameType(), options);
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null)
- controllerName = session.getUsername();
+ if (userId != null) {
+ User user = UserManager.getInstance().getUser(userId);
+ controllerName = user.getName();
+ }
else
controllerName = "System";
table = new Table(roomId, options.getGameType(), options.getName(), controllerName, DeckValidatorFactory.getInstance().createDeckValidator(options.getDeckType()), options.getPlayerTypes(), match);
init();
}
- public TableController(UUID roomId, UUID sessionId, TournamentOptions options) {
- this.sessionId = sessionId;
+ public TableController(UUID roomId, UUID userId, TournamentOptions options) {
+ this.userId = userId;
chatId = ChatManager.getInstance().createChatSession();
tournament = TournamentFactory.getInstance().createTournament(options.getTournamentType(), options);
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null)
- controllerName = session.getUsername();
+ if (userId != null) {
+ User user = UserManager.getInstance().getUser(userId);
+ controllerName = user.getName();
+ }
else
controllerName = "System";
table = new Table(roomId, options.getTournamentType(), options.getName(), controllerName, DeckValidatorFactory.getInstance().createDeckValidator(options.getMatchOptions().getDeckType()), options.getPlayerTypes(), tournament);
@@ -124,7 +125,7 @@ public class TableController {
);
}
- public synchronized boolean joinTournament(UUID sessionId, String name, String playerType, int skill) throws GameException {
+ public synchronized boolean joinTournament(UUID userId, String name, String playerType, int skill) throws GameException {
if (table.getState() != TableState.WAITING) {
return false;
}
@@ -138,13 +139,13 @@ public class TableController {
logger.info("player joined " + player.getId());
//only add human players to sessionPlayerMap
if (seat.getPlayer().isHuman()) {
- sessionPlayerMap.put(sessionId, player.getId());
+ userPlayerMap.put(userId, player.getId());
}
return true;
}
- public synchronized boolean joinTable(UUID sessionId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
+ public synchronized boolean joinTable(UUID userId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
if (table.getState() != TableState.WAITING) {
return false;
}
@@ -153,7 +154,7 @@ public class TableController {
throw new GameException("No available seats.");
}
Deck deck = Deck.load(deckList);
- if (!Main.server.isTestMode() && !table.getValidator().validate(deck)) {
+ if (!Main.isTestMode() && !table.getValidator().validate(deck)) {
throw new InvalidDeckException(name + " has an invalid deck for this format", table.getValidator().getInvalid());
}
@@ -163,13 +164,13 @@ public class TableController {
logger.info("player joined " + player.getId());
//only add human players to sessionPlayerMap
if (seat.getPlayer().isHuman()) {
- sessionPlayerMap.put(sessionId, player.getId());
+ userPlayerMap.put(userId, player.getId());
}
return true;
}
- public void addPlayer(UUID sessionId, Player player, String playerType, Deck deck) throws GameException {
+ public void addPlayer(UUID userId, Player player, String playerType, Deck deck) throws GameException {
if (table.getState() != TableState.WAITING) {
return;
}
@@ -180,44 +181,45 @@ public class TableController {
match.addPlayer(player, deck);
table.joinTable(player, seat);
if (player.isHuman()) {
- sessionPlayerMap.put(sessionId, player.getId());
+ userPlayerMap.put(userId, player.getId());
}
}
-
- public synchronized boolean submitDeck(UUID sessionId, DeckCardLists deckList) throws MageException {
+
+ public synchronized boolean submitDeck(UUID userId, DeckCardLists deckList) throws MageException {
+ UUID playerId = userPlayerMap.get(userId);
if (table.getState() != TableState.SIDEBOARDING && table.getState() != TableState.CONSTRUCTING) {
return false;
}
Deck deck = Deck.load(deckList);
- if (!Main.server.isTestMode() && !table.getValidator().validate(deck)) {
+ if (!Main.isTestMode() && !table.getValidator().validate(deck)) {
throw new InvalidDeckException("Invalid deck for this format", table.getValidator().getInvalid());
}
- submitDeck(sessionId, deck);
+ submitDeck(playerId, deck);
return true;
}
- private void submitDeck(UUID sessionId, Deck deck) {
+ private void submitDeck(UUID playerId, Deck deck) {
if (table.getState() == TableState.SIDEBOARDING) {
- match.submitDeck(sessionPlayerMap.get(sessionId), deck);
+ match.submitDeck(playerId, deck);
}
else {
- TournamentManager.getInstance().submitDeck(tournament.getId(), sessionId, deck);
+ TournamentManager.getInstance().submitDeck(tournament.getId(), playerId, deck);
}
}
- public boolean watchTable(UUID sessionId) {
+ public boolean watchTable(UUID userId) {
if (table.getState() != TableState.DUELING) {
return false;
}
- SessionManager.getInstance().getSession(sessionId).watchGame(match.getGame().getId());
+ UserManager.getInstance().getUser(userId).watchGame(match.getGame().getId());
return true;
}
- public boolean replayTable(UUID sessionId) {
+ public boolean replayTable(UUID userId) {
if (table.getState() != TableState.FINISHED) {
return false;
}
- ReplayManager.getInstance().replayGame(sessionId, table.getId());
+ ReplayManager.getInstance().replayGame(table.getId(), userId);
return true;
}
@@ -233,19 +235,24 @@ public class TableController {
return player;
}
- public synchronized void leaveTable(UUID sessionId) {
+ public void kill(UUID userId) {
+ leaveTable(userId);
+ userPlayerMap.remove(userId);
+ }
+
+ public synchronized void leaveTable(UUID userId) {
if (table.getState() == TableState.WAITING || table.getState() == TableState.STARTING)
- table.leaveTable(sessionPlayerMap.get(sessionId));
+ table.leaveTable(userPlayerMap.get(userId));
}
- public synchronized void startMatch(UUID sessionId) {
- if (sessionId.equals(this.sessionId)) {
+ public synchronized void startMatch(UUID userId) {
+ if (userId.equals(this.userId)) {
startMatch();
}
}
- public synchronized void startChallenge(UUID sessionId, UUID challengeId) {
- if (sessionId.equals(this.sessionId)) {
+ public synchronized void startChallenge(UUID userId, UUID challengeId) {
+ if (userId.equals(this.userId)) {
try {
match.startMatch();
match.startGame();
@@ -253,11 +260,10 @@ public class TableController {
GameOptions options = new GameOptions();
options.testMode = true;
// match.getGame().setGameOptions(options);
- GameManager.getInstance().createGameSession(match.getGame(), sessionPlayerMap, table.getId(), null);
+ GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), null);
ChallengeManager.getInstance().prepareChallenge(getPlayerId(), match);
- SessionManager sessionManager = SessionManager.getInstance();
- for (Entry entry: sessionPlayerMap.entrySet()) {
- sessionManager.getSession(entry.getKey()).gameStarted(match.getGame().getId(), entry.getValue());
+ for (Entry entry: userPlayerMap.entrySet()) {
+ UserManager.getInstance().getUser(entry.getKey()).gameStarted(match.getGame().getId(), entry.getValue());
}
} catch (GameException ex) {
logger.fatal(null, ex);
@@ -267,7 +273,7 @@ public class TableController {
private UUID getPlayerId() throws GameException {
UUID playerId = null;
- for (Entry entry : sessionPlayerMap.entrySet()) {
+ for (Entry entry : userPlayerMap.entrySet()) {
playerId = entry.getValue();
break;
}
@@ -292,12 +298,11 @@ public class TableController {
try {
match.startGame();
table.initGame();
- GameManager.getInstance().createGameSession(match.getGame(), sessionPlayerMap, table.getId(), choosingPlayerId);
- SessionManager sessionManager = SessionManager.getInstance();
- for (Entry entry: sessionPlayerMap.entrySet()) {
- Session session = sessionManager.getSession(entry.getKey());
- if (session != null) {
- session.gameStarted(match.getGame().getId(), entry.getValue());
+ GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId);
+ for (Entry entry: userPlayerMap.entrySet()) {
+ User user = UserManager.getInstance().getUser(entry.getKey());
+ if (user != null) {
+ user.gameStarted(match.getGame().getId(), entry.getValue());
}
else {
TableManager.getInstance().removeTable(table.getId());
@@ -314,38 +319,37 @@ public class TableController {
}
}
- public synchronized void startTournament(UUID sessionId) {
+ public synchronized void startTournament(UUID userId) {
try {
- if (sessionId.equals(this.sessionId) && table.getState() == TableState.STARTING) {
- TournamentManager.getInstance().createTournamentSession(tournament, sessionPlayerMap, table.getId());
- SessionManager sessionManager = SessionManager.getInstance();
- for (Entry entry: sessionPlayerMap.entrySet()) {
- Session session = sessionManager.getSession(entry.getKey());
- session.tournamentStarted(tournament.getId(), entry.getValue());
+ if (userId.equals(this.userId) && table.getState() == TableState.STARTING) {
+ TournamentManager.getInstance().createTournamentSession(tournament, userPlayerMap, table.getId());
+ for (Entry entry: userPlayerMap.entrySet()) {
+ User user = UserManager.getInstance().getUser(entry.getKey());
+ user.tournamentStarted(tournament.getId(), entry.getValue());
}
}
}
catch (Exception ex) {
logger.fatal("Error starting tournament", ex);
TableManager.getInstance().removeTable(table.getId());
- TournamentManager.getInstance().kill(tournament.getId(), sessionId);
+ TournamentManager.getInstance().kill(tournament.getId(), userId);
}
}
public void startDraft(Draft draft) {
table.initDraft();
- DraftManager.getInstance().createDraftSession(draft, sessionPlayerMap, table.getId());
- SessionManager sessionManager = SessionManager.getInstance();
- for (Entry entry: sessionPlayerMap.entrySet()) {
- sessionManager.getSession(entry.getKey()).draftStarted(draft.getId(), entry.getValue());
+ DraftManager.getInstance().createDraftSession(draft, userPlayerMap, table.getId());
+ for (Entry entry: userPlayerMap.entrySet()) {
+ UserManager.getInstance().getUser(entry.getKey()).draftStarted(draft.getId(), entry.getValue());
}
}
private void sideboard(UUID playerId, Deck deck, int timeout) throws MageException {
- SessionManager sessionManager = SessionManager.getInstance();
- for (Entry entry: sessionPlayerMap.entrySet()) {
+ for (Entry entry: userPlayerMap.entrySet()) {
if (entry.getValue().equals(playerId)) {
- sessionManager.getSession(entry.getKey()).sideboard(deck, table.getId(), timeout);
+ User user = UserManager.getInstance().getUser(entry.getKey());
+ if (user != null)
+ user.sideboard(deck, table.getId(), timeout);
break;
}
}
@@ -382,6 +386,10 @@ public class TableController {
tournament.nextStep();
}
+ public void endTournament(Tournament tournament) {
+ //TODO: implement this
+ }
+
public void swapSeats(int seatNum1, int seatNum2) {
if (table.getState() == TableState.STARTING) {
if (seatNum1 >= 0 && seatNum2 >= 0 && seatNum1 < table.getSeats().length && seatNum2 < table.getSeats().length) {
@@ -395,8 +403,8 @@ public class TableController {
}
}
- public boolean isOwner(UUID sessionId) {
- return sessionId.equals(this.sessionId);
+ public boolean isOwner(UUID userId) {
+ return userId.equals(this.userId);
}
public Table getTable() {
diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManager.java
index 2f7421d6c3..517060b087 100644
--- a/Mage.Server/src/main/java/mage/server/TableManager.java
+++ b/Mage.Server/src/main/java/mage/server/TableManager.java
@@ -38,6 +38,7 @@ import mage.game.GameException;
import mage.game.draft.Draft;
import mage.game.match.Match;
import mage.game.match.MatchOptions;
+import mage.game.tournament.Tournament;
import mage.game.tournament.TournamentOptions;
import mage.MageException;
import mage.players.Player;
@@ -60,22 +61,22 @@ public class TableManager {
return INSTANCE;
}
- public Table createTable(UUID roomId, UUID sessionId, MatchOptions options) {
- TableController tableController = new TableController(roomId, sessionId, options);
+ public Table createTable(UUID roomId, UUID userId, MatchOptions options) {
+ TableController tableController = new TableController(roomId, userId, options);
controllers.put(tableController.getTable().getId(), tableController);
tables.put(tableController.getTable().getId(), tableController.getTable());
return tableController.getTable();
}
public Table createTable(UUID roomId, MatchOptions options) {
- TableController tableController = new TableController(roomId, UUID.randomUUID(), options);
+ TableController tableController = new TableController(roomId, null, options);
controllers.put(tableController.getTable().getId(), tableController);
tables.put(tableController.getTable().getId(), tableController.getTable());
return tableController.getTable();
}
- public Table createTournamentTable(UUID roomId, UUID sessionId, TournamentOptions options) {
- TableController tableController = new TableController(roomId, sessionId, options);
+ public Table createTournamentTable(UUID roomId, UUID userId, TournamentOptions options) {
+ TableController tableController = new TableController(roomId, userId, options);
controllers.put(tableController.getTable().getId(), tableController);
tables.put(tableController.getTable().getId(), tableController.getTable());
return tableController.getTable();
@@ -95,45 +96,47 @@ public class TableManager {
return tables.values();
}
- public boolean joinTable(UUID sessionId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
+ public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).joinTable(sessionId, name, playerType, skill, deckList);
+ return controllers.get(tableId).joinTable(userId, name, playerType, skill, deckList);
return false;
}
- public boolean joinTournament(UUID sessionId, UUID tableId, String name, String playerType, int skill) throws GameException {
+ public boolean joinTournament(UUID userId, UUID tableId, String name, String playerType, int skill) throws GameException {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).joinTournament(sessionId, name, playerType, skill);
+ return controllers.get(tableId).joinTournament(userId, name, playerType, skill);
return false;
}
- public boolean submitDeck(UUID sessionId, UUID tableId, DeckCardLists deckList) throws MageException {
+ public boolean submitDeck(UUID userId, UUID tableId, DeckCardLists deckList) throws MageException {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).submitDeck(sessionId, deckList);
+ return controllers.get(tableId).submitDeck(userId, deckList);
return false;
}
- public void removeSession(UUID sessionId) {
- // TODO: search through tables and remove session
+ public void removeSession(UUID userId) {
+ for (TableController controller: controllers.values()) {
+ controller.kill(userId);
+ }
}
- public boolean isTableOwner(UUID tableId, UUID sessionId) {
+ public boolean isTableOwner(UUID tableId, UUID userId) {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).isOwner(sessionId);
+ return controllers.get(tableId).isOwner(userId);
return false;
}
- public boolean removeTable(UUID sessionId, UUID tableId) {
- if (isTableOwner(tableId, sessionId) || SessionManager.getInstance().isAdmin(sessionId)) {
+ public boolean removeTable(UUID userId, UUID tableId) {
+ if (isTableOwner(tableId, userId) || UserManager.getInstance().isAdmin(userId)) {
removeTable(tableId);
return true;
}
return false;
}
- public void leaveTable(UUID sessionId, UUID tableId) {
+ public void leaveTable(UUID userId, UUID tableId) {
if (controllers.containsKey(tableId))
- controllers.get(tableId).leaveTable(sessionId);
+ controllers.get(tableId).leaveTable(userId);
}
public UUID getChatId(UUID tableId) {
@@ -142,9 +145,9 @@ public class TableManager {
return null;
}
- public void startMatch(UUID sessionId, UUID roomId, UUID tableId) {
+ public void startMatch(UUID userId, UUID roomId, UUID tableId) {
if (controllers.containsKey(tableId))
- controllers.get(tableId).startMatch(sessionId);
+ controllers.get(tableId).startMatch(userId);
}
public void startMatch(UUID roomId, UUID tableId) {
@@ -152,14 +155,14 @@ public class TableManager {
controllers.get(tableId).startMatch();
}
- public void startChallenge(UUID sessionId, UUID roomId, UUID tableId, UUID challengeId) {
+ public void startChallenge(UUID userId, UUID roomId, UUID tableId, UUID challengeId) {
if (controllers.containsKey(tableId))
- controllers.get(tableId).startChallenge(sessionId, challengeId);
+ controllers.get(tableId).startChallenge(userId, challengeId);
}
- public void startTournament(UUID sessionId, UUID roomId, UUID tableId) {
+ public void startTournament(UUID userId, UUID roomId, UUID tableId) {
if (controllers.containsKey(tableId))
- controllers.get(tableId).startTournament(sessionId);
+ controllers.get(tableId).startTournament(userId);
}
public void startDraft(UUID tableId, Draft draft) {
@@ -167,15 +170,15 @@ public class TableManager {
controllers.get(tableId).startDraft(draft);
}
- public boolean watchTable(UUID sessionId, UUID tableId) {
+ public boolean watchTable(UUID userId, UUID tableId) {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).watchTable(sessionId);
+ return controllers.get(tableId).watchTable(userId);
return false;
}
- public boolean replayTable(UUID sessionId, UUID tableId) {
+ public boolean replayTable(UUID userId, UUID tableId) {
if (controllers.containsKey(tableId))
- return controllers.get(tableId).replayTable(sessionId);
+ return controllers.get(tableId).replayTable(userId);
return false;
}
@@ -189,8 +192,13 @@ public class TableManager {
controllers.get(tableId).endDraft(draft);
}
- public void swapSeats(UUID tableId, UUID sessionId, int seatNum1, int seatNum2) {
- if (controllers.containsKey(tableId) && isTableOwner(tableId, sessionId)) {
+ public void endTournament(UUID tableId, Tournament tournament) {
+ if (controllers.containsKey(tableId))
+ controllers.get(tableId).endTournament(tournament);
+ }
+
+ public void swapSeats(UUID tableId, UUID userId, int seatNum1, int seatNum2) {
+ if (controllers.containsKey(tableId) && isTableOwner(tableId, userId)) {
controllers.get(tableId).swapSeats(seatNum1, seatNum2);
}
}
@@ -200,9 +208,9 @@ public class TableManager {
controllers.get(tableId).construct();
}
- public void addPlayer(UUID sessionId, UUID tableId, Player player, String playerType, Deck deck) throws GameException {
+ public void addPlayer(UUID userId, UUID tableId, Player player, String playerType, Deck deck) throws GameException {
if (controllers.containsKey(tableId))
- controllers.get(tableId).addPlayer(sessionId, player, playerType, deck);
+ controllers.get(tableId).addPlayer(userId, player, playerType, deck);
}
public void removeTable(UUID tableId) {
diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java
new file mode 100644
index 0000000000..bc53955d85
--- /dev/null
+++ b/Mage.Server/src/main/java/mage/server/User.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.server;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.UUID;
+import mage.cards.decks.Deck;
+import mage.interfaces.callback.ClientCallback;
+import mage.server.draft.DraftSession;
+import mage.server.game.GameManager;
+import mage.server.game.GameSession;
+import mage.server.tournament.TournamentSession;
+import mage.view.TableClientMessage;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class User {
+
+ public enum UserState {
+ Created, Connected, Disconnected, Reconnected;
+ }
+
+ private UUID userId = UUID.randomUUID();
+ private String userName;
+ private String sessionId = "";
+ private String host;
+ private Date connectionTime = new Date();
+ private Date lastActivity = new Date();
+ private UserState userState;
+ private Map gameSessions = new HashMap();
+ private Map draftSessions = new HashMap();
+ private Map tournamentSessions = new HashMap();
+
+ public User(String userName, String host) {
+ this.userName = userName;
+ this.host = host;
+ this.userState = UserState.Created;
+ }
+
+ public String getName() {
+ return userName;
+ }
+
+ public UUID getId() {
+ return userId;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public String getSessionId() {
+ return sessionId;
+ }
+
+ public void setSessionId(String sessionId) {
+ this.sessionId = sessionId;
+ if (sessionId.isEmpty())
+ userState = UserState.Disconnected;
+ else if (userState == UserState.Created)
+ userState = UserState.Connected;
+ else {
+ userState = UserState.Reconnected;
+ reconnect();
+ }
+ }
+
+ public boolean isConnected() {
+ return userState == UserState.Connected || userState == UserState.Reconnected;
+ }
+
+ public Date getConnectionTime() {
+ return connectionTime;
+ }
+
+ public synchronized void fireCallback(final ClientCallback call) {
+ if (isConnected()) {
+ Session session = SessionManager.getInstance().getSession(sessionId);
+ session.fireCallback(call);
+ }
+ }
+
+ public void gameStarted(final UUID gameId, final UUID playerId) {
+ fireCallback(new ClientCallback("startGame", gameId, new TableClientMessage(gameId, playerId)));
+ }
+
+ public void draftStarted(final UUID draftId, final UUID playerId) {
+ fireCallback(new ClientCallback("startDraft", draftId, new TableClientMessage(draftId, playerId)));
+ }
+
+ public void tournamentStarted(final UUID tournamentId, final UUID playerId) {
+ fireCallback(new ClientCallback("startTournament", tournamentId, new TableClientMessage(tournamentId, playerId)));
+ }
+
+ public void sideboard(final Deck deck, final UUID tableId, final int time) {
+ fireCallback(new ClientCallback("sideboard", tableId, new TableClientMessage(deck, tableId, time)));
+ }
+
+ public void construct(final Deck deck, final UUID tableId, final int time) {
+ fireCallback(new ClientCallback("construct", tableId, new TableClientMessage(deck, tableId, time)));
+ }
+
+ public void watchGame(final UUID gameId) {
+ fireCallback(new ClientCallback("watchGame", gameId));
+ }
+
+ public void replayGame(final UUID gameId) {
+ fireCallback(new ClientCallback("replayGame", gameId));
+ }
+
+ public void sendPlayerUUID(final UUID gameId, final UUID data) {
+ lastActivity = new Date();
+ GameManager.getInstance().sendPlayerUUID(gameId, userId, data);
+ }
+
+ public void sendPlayerString(final UUID gameId, final String data) {
+ lastActivity = new Date();
+ GameManager.getInstance().sendPlayerString(gameId, userId, data);
+ }
+
+ public void sendPlayerBoolean(final UUID gameId, final Boolean data) {
+ lastActivity = new Date();
+ GameManager.getInstance().sendPlayerBoolean(gameId, userId, data);
+ }
+
+ public void sendPlayerInteger(final UUID gameId, final Integer data) {
+ lastActivity = new Date();
+ GameManager.getInstance().sendPlayerInteger(gameId, userId, data);
+ }
+
+ public boolean isExpired(Date expired) {
+ return userState == UserState.Disconnected && lastActivity.before(expired);
+ }
+
+ private void reconnect() {
+ for (Entry entry: gameSessions.entrySet()) {
+ gameStarted(entry.getValue().getGameId(), entry.getKey());
+ entry.getValue().init();
+ GameManager.getInstance().sendPlayerString(entry.getValue().getGameId(), userId, "");
+ }
+ for (Entry entry: draftSessions.entrySet()) {
+ draftStarted(entry.getValue().getDraftId(), entry.getKey());
+ entry.getValue().init();
+ entry.getValue().update();
+ }
+ for (Entry entry: tournamentSessions.entrySet()) {
+ tournamentStarted(entry.getValue().getTournamentId(), entry.getKey());
+ entry.getValue().init();
+ entry.getValue().update();
+ }
+ }
+
+ public void addGame(UUID playerId, GameSession gameSession) {
+ gameSessions.put(playerId, gameSession);
+ }
+
+ public void removeGame(UUID playerId) {
+ gameSessions.remove(playerId);
+ }
+
+ public void addDraft(UUID playerId, DraftSession draftSession) {
+ draftSessions.put(playerId, draftSession);
+ }
+
+ public void removeDraft(UUID playerId) {
+ draftSessions.remove(playerId);
+ }
+
+ public void addTournament(UUID playerId, TournamentSession tournamentSession) {
+ tournamentSessions.put(playerId, tournamentSession);
+ }
+
+ public void removeTournament(UUID playerId) {
+ tournamentSessions.remove(playerId);
+ }
+
+ public void kill() {
+ for (Entry entry: gameSessions.entrySet()) {
+ entry.getValue().kill();
+ }
+ for (Entry entry: draftSessions.entrySet()) {
+ entry.getValue().setKilled();
+ }
+ for (Entry entry: tournamentSessions.entrySet()) {
+ entry.getValue().setKilled();
+ }
+ }
+
+}
diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManager.java
new file mode 100644
index 0000000000..29944af1e1
--- /dev/null
+++ b/Mage.Server/src/main/java/mage/server/UserManager.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.server;
+
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import mage.view.ChatMessage.MessageColor;
+
+/**
+ *
+ * manages users - if a user is disconnected and 10 minutes have passed with no
+ * activity the user is removed
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class UserManager {
+
+ protected static ScheduledExecutorService expireExecutor = Executors.newSingleThreadScheduledExecutor();
+
+ private final static UserManager INSTANCE = new UserManager();
+
+ public static UserManager getInstance() {
+ return INSTANCE;
+ }
+
+ private UserManager() {
+ expireExecutor.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ checkExpired();
+ }
+ }, 60, 60, TimeUnit.SECONDS);
+ }
+
+ private ConcurrentHashMap users = new ConcurrentHashMap();
+
+ public User createUser(String userName, String host) {
+ if (findUser(userName) != null)
+ return null; //user already exists
+ User user = new User(userName, host);
+ users.put(user.getId(), user);
+ return user;
+ }
+
+ public User getUser(UUID userId) {
+ return users.get(userId);
+ }
+
+ public User findUser(String userName) {
+ for (User user: users.values()) {
+ if (user.getName().equals(userName))
+ return user;
+ }
+ return null;
+ }
+
+ public Collection getUsers() {
+ return users.values();
+ }
+
+ public boolean connectToSession(String sessionId, UUID userId) {
+ if (users.containsKey(userId)) {
+ users.get(userId).setSessionId(sessionId);
+ return true;
+ }
+ return false;
+ }
+
+ public void disconnect(UUID userId) {
+ if (users.containsKey(userId)) {
+ users.get(userId).setSessionId("");
+ ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK);
+ }
+ }
+
+ public boolean isAdmin(UUID userId) {
+ if (users.containsKey(userId)) {
+ return users.get(userId).getName().equals("Admin");
+ }
+ return false;
+ }
+
+ public void removeUser(UUID userId) {
+ if (users.containsKey(userId)) {
+ users.get(userId).setSessionId("");
+ ChatManager.getInstance().broadcast(userId, "has disconnected", MessageColor.BLACK);
+ users.get(userId).kill();
+ users.remove(userId);
+ }
+ }
+
+ private void checkExpired() {
+ Calendar expired = Calendar.getInstance();
+ expired.add(Calendar.MINUTE, -10) ;
+ for (User user: users.values()) {
+ if (user.isExpired(expired.getTime())) {
+ user.kill();
+ users.remove(user.getId());
+ }
+ }
+ }
+
+}
diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftController.java b/Mage.Server/src/main/java/mage/server/draft/DraftController.java
index c8c19330da..2b386b018b 100644
--- a/Mage.Server/src/main/java/mage/server/draft/DraftController.java
+++ b/Mage.Server/src/main/java/mage/server/draft/DraftController.java
@@ -28,6 +28,7 @@
package mage.server.draft;
+import java.io.File;
import java.util.UUID;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@@ -40,6 +41,7 @@ import mage.game.events.TableEvent;
import mage.MageException;
import mage.server.game.GameController;
import mage.server.TableManager;
+import mage.server.UserManager;
import mage.server.util.ThreadExecutor;
import mage.view.DraftPickView;
import mage.view.DraftView;
@@ -52,16 +54,17 @@ import org.apache.log4j.Logger;
public class DraftController {
private final static Logger logger = Logger.getLogger(GameController.class);
+ public static final String INIT_FILE_PATH = "config" + File.separator + "init.txt";
private ConcurrentHashMap draftSessions = new ConcurrentHashMap();
- private ConcurrentHashMap sessionPlayerMap;
+ private ConcurrentHashMap userPlayerMap;
private UUID draftSessionId;
private Draft draft;
private UUID tableId;
- public DraftController(Draft draft, ConcurrentHashMap sessionPlayerMap, UUID tableId) {
+ public DraftController(Draft draft, ConcurrentHashMap userPlayerMap, UUID tableId) {
draftSessionId = UUID.randomUUID();
- this.sessionPlayerMap = sessionPlayerMap;
+ this.userPlayerMap = userPlayerMap;
this.draft = draft;
this.tableId = tableId;
init();
@@ -114,22 +117,23 @@ public class DraftController {
checkStart();
}
- private UUID getPlayerId(UUID sessionId) {
- return sessionPlayerMap.get(sessionId);
+ private UUID getPlayerId(UUID userId) {
+ return userPlayerMap.get(userId);
}
- public void join(UUID sessionId) {
- UUID playerId = sessionPlayerMap.get(sessionId);
- DraftSession draftSession = new DraftSession(draft, sessionId, playerId);
+ public void join(UUID userId) {
+ UUID playerId = userPlayerMap.get(userId);
+ DraftSession draftSession = new DraftSession(draft, userId, playerId);
draftSessions.put(playerId, draftSession);
- logger.info("player " + playerId + " has joined draft " + draft.getId());
+ UserManager.getInstance().getUser(userId).addDraft(playerId, draftSession);
+ logger.info("User " + UserManager.getInstance().getUser(userId).getName() + " has joined draft " + draft.getId());
draft.getPlayer(playerId).setJoined();
checkStart();
}
private synchronized void startDraft() {
for (final Entry entry: draftSessions.entrySet()) {
- if (!entry.getValue().init(getDraftView())) {
+ if (!entry.getValue().init()) {
logger.fatal("Unable to initialize client");
//TODO: generate client error message
return;
@@ -140,7 +144,7 @@ public class DraftController {
private void checkStart() {
if (allJoined()) {
- ThreadExecutor.getInstance().getRMIExecutor().execute(
+ ThreadExecutor.getInstance().getCallExecutor().execute(
new Runnable() {
@Override
public void run() {
@@ -161,29 +165,31 @@ public class DraftController {
return true;
}
- private void leave(UUID sessionId) {
- draft.leave(getPlayerId(sessionId));
+ private void leave(UUID userId) {
+ draft.leave(getPlayerId(userId));
}
private void endDraft() throws MageException {
for (final DraftSession draftSession: draftSessions.values()) {
draftSession.draftOver();
+ draftSession.removeDraft();
}
TableManager.getInstance().endDraft(tableId, draft);
}
- public void kill(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- draftSessions.get(sessionPlayerMap.get(sessionId)).setKilled();
- draftSessions.remove(sessionPlayerMap.get(sessionId));
- leave(sessionId);
- sessionPlayerMap.remove(sessionId);
+ public void kill(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ draftSessions.get(userPlayerMap.get(userId)).setKilled();
+ draftSessions.remove(userPlayerMap.get(userId));
+ leave(userId);
+ userPlayerMap.remove(userId);
}
}
- public void timeout(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- draft.autoPick(sessionPlayerMap.get(sessionId));
+ public void timeout(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ draft.autoPick(userPlayerMap.get(userId));
+ logger.info("Draft pick timeout - autopick for player: " + userPlayerMap.get(userId));
}
}
@@ -191,30 +197,19 @@ public class DraftController {
return this.draftSessionId;
}
- public DraftPickView sendCardPick(UUID sessionId, UUID cardId) {
- if (draftSessions.get(sessionPlayerMap.get(sessionId)).sendCardPick(cardId)) {
- return getDraftPickView(sessionPlayerMap.get(sessionId), 0);
- }
- return null;
+ public DraftPickView sendCardPick(UUID userId, UUID cardId) {
+ return draftSessions.get(userPlayerMap.get(userId)).sendCardPick(cardId);
}
private synchronized void updateDraft() throws MageException {
for (final Entry entry: draftSessions.entrySet()) {
- entry.getValue().update(getDraftView());
+ entry.getValue().update();
}
}
private synchronized void pickCard(UUID playerId, int timeout) throws MageException {
if (draftSessions.containsKey(playerId))
- draftSessions.get(playerId).pickCard(getDraftPickView(playerId, timeout), timeout);
- }
-
- private DraftView getDraftView() {
- return new DraftView(draft);
- }
-
- private DraftPickView getDraftPickView(UUID playerId, int timeout) {
- return new DraftPickView(draft.getPlayer(playerId), timeout);
+ draftSessions.get(playerId).pickCard(timeout);
}
}
diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java b/Mage.Server/src/main/java/mage/server/draft/DraftManager.java
index e4fbdff9e8..1e72d3d04b 100644
--- a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java
+++ b/Mage.Server/src/main/java/mage/server/draft/DraftManager.java
@@ -48,36 +48,36 @@ public class DraftManager {
private ConcurrentHashMap draftControllers = new ConcurrentHashMap();
- public UUID createDraftSession(Draft draft, ConcurrentHashMap sessionPlayerMap, UUID tableId) {
- DraftController draftController = new DraftController(draft, sessionPlayerMap, tableId);
+ public UUID createDraftSession(Draft draft, ConcurrentHashMap userPlayerMap, UUID tableId) {
+ DraftController draftController = new DraftController(draft, userPlayerMap, tableId);
draftControllers.put(draft.getId(), draftController);
return draftController.getSessionId();
}
- public void joinDraft(UUID draftId, UUID sessionId) {
- draftControllers.get(draftId).join(sessionId);
+ public void joinDraft(UUID draftId, UUID userId) {
+ draftControllers.get(draftId).join(userId);
}
public void destroyChatSession(UUID gameId) {
draftControllers.remove(gameId);
}
- public DraftPickView sendCardPick(UUID draftId, UUID sessionId, UUID cardId) {
- return draftControllers.get(draftId).sendCardPick(sessionId, cardId);
+ public DraftPickView sendCardPick(UUID draftId, UUID userId, UUID cardId) {
+ return draftControllers.get(draftId).sendCardPick(userId, cardId);
}
- public void removeSession(UUID sessionId) {
+ public void removeSession(UUID userId) {
for (DraftController controller: draftControllers.values()) {
- controller.kill(sessionId);
+ controller.kill(userId);
}
}
- public void kill(UUID draftId, UUID sessionId) {
- draftControllers.get(draftId).kill(sessionId);
+ public void kill(UUID draftId, UUID userId) {
+ draftControllers.get(draftId).kill(userId);
}
- public void timeout(UUID gameId, UUID sessionId) {
- draftControllers.get(gameId).timeout(sessionId);
+ public void timeout(UUID gameId, UUID userId) {
+ draftControllers.get(gameId).timeout(userId);
}
public void removeDraft(UUID draftId) {
diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftSession.java b/Mage.Server/src/main/java/mage/server/draft/DraftSession.java
index f30e2a3040..fc947f6435 100644
--- a/Mage.Server/src/main/java/mage/server/draft/DraftSession.java
+++ b/Mage.Server/src/main/java/mage/server/draft/DraftSession.java
@@ -32,15 +32,11 @@ import java.rmi.RemoteException;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
import mage.game.draft.Draft;
-import mage.MageException;
-import mage.interfaces.callback.CallbackException;
import mage.interfaces.callback.ClientCallback;
-import mage.server.Session;
-import mage.server.SessionManager;
+import mage.server.User;
+import mage.server.UserManager;
import mage.server.util.ThreadExecutor;
import mage.view.DraftClientMessage;
import mage.view.DraftPickView;
@@ -55,7 +51,7 @@ public class DraftSession {
protected final static Logger logger = Logger.getLogger(DraftSession.class);
- protected UUID sessionId;
+ protected UUID userId;
protected UUID playerId;
protected Draft draft;
protected boolean killed = false;
@@ -63,64 +59,59 @@ public class DraftSession {
private ScheduledFuture> futureTimeout;
protected static ScheduledExecutorService timeoutExecutor = ThreadExecutor.getInstance().getTimeoutExecutor();
- public DraftSession(Draft draft, UUID sessionId, UUID playerId) {
- this.sessionId = sessionId;
+ public DraftSession(Draft draft, UUID userId, UUID playerId) {
+ this.userId = userId;
this.draft = draft;
this.playerId = playerId;
}
- public boolean init(final DraftView draftView) {
+ public boolean init() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("draftInit", draft.getId(), draftView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ if (futureTimeout != null && !futureTimeout.isDone()) {
+ int remaining = (int) futureTimeout.getDelay(TimeUnit.SECONDS);
+ user.fireCallback(new ClientCallback("draftInit", draft.getId(), new DraftClientMessage(getDraftPickView(remaining))));
+ }
return true;
}
}
return false;
}
-// public boolean waitForAck(String message) {
-// Session session = SessionManager.getInstance().getSession(sessionId);
-// do {
-// //TODO: add timeout
-// } while (!session.getAckMessage().equals(message) && !killed);
-// return true;
-// }
-
- public void update(final DraftView draftView) {
+ public void update() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("draftUpdate", draft.getId(), draftView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("draftUpdate", draft.getId(), getDraftView()));
}
}
}
- public void inform(final String message, final DraftView draftView) {
+ public void inform(final String message) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("draftInform", draft.getId(), new DraftClientMessage(draftView, message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("draftInform", draft.getId(), new DraftClientMessage(getDraftView(), message)));
}
}
}
public void draftOver() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("draftOver", draft.getId()));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("draftOver", draft.getId()));
}
}
}
- public void pickCard(final DraftPickView draftPickView, int timeout) {
+ public void pickCard(int timeout) {
if (!killed) {
setupTimeout(timeout);
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("draftPick", draft.getId(), new DraftClientMessage(draftPickView)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("draftPick", draft.getId(), new DraftClientMessage(getDraftPickView(timeout))));
}
}
}
@@ -132,7 +123,7 @@ public class DraftSession {
new Runnable() {
@Override
public void run() {
- DraftManager.getInstance().timeout(draft.getId(), sessionId);
+ DraftManager.getInstance().timeout(draft.getId(), userId);
}
},
seconds, TimeUnit.SECONDS
@@ -143,23 +134,41 @@ public class DraftSession {
private synchronized void cancelTimeout() {
if (futureTimeout != null) {
futureTimeout.cancel(false);
- ((ThreadPoolExecutor)timeoutExecutor).getQueue().remove(futureTimeout);
}
}
protected void handleRemoteException(RemoteException ex) {
logger.fatal("DraftSession error ", ex);
- DraftManager.getInstance().kill(draft.getId(), sessionId);
+ DraftManager.getInstance().kill(draft.getId(), userId);
}
public void setKilled() {
killed = true;
}
- public boolean sendCardPick(UUID cardId) {
+ public DraftPickView sendCardPick(UUID cardId) {
cancelTimeout();
- return draft.addPick(playerId, cardId);
+ if (draft.addPick(playerId, cardId))
+ return getDraftPickView(0);
+ return null;
+ }
+ public void removeDraft() {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null)
+ user.removeDraft(playerId);
+ }
+
+ private DraftView getDraftView() {
+ return new DraftView(draft);
+ }
+
+ private DraftPickView getDraftPickView(int timeout) {
+ return new DraftPickView(draft.getPlayer(playerId), timeout);
+ }
+
+ public UUID getDraftId() {
+ return draft.getId();
}
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java
index 269075a6cd..614da0a650 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameController.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameController.java
@@ -29,9 +29,7 @@
package mage.server.game;
import java.io.BufferedOutputStream;
-import java.util.logging.Level;
-import mage.game.LookedAt;
import mage.MageException;
import mage.server.TableManager;
import java.io.File;
@@ -64,6 +62,7 @@ import mage.game.events.TableEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.server.ChatManager;
+import mage.server.UserManager;
import mage.server.util.ThreadExecutor;
import mage.sets.Sets;
import mage.view.*;
@@ -82,7 +81,7 @@ public class GameController implements GameCallback {
private ConcurrentHashMap gameSessions = new ConcurrentHashMap();
private ConcurrentHashMap watchers = new ConcurrentHashMap();
- private ConcurrentHashMap sessionPlayerMap;
+ private ConcurrentHashMap userPlayerMap;
private UUID gameSessionId;
private Game game;
private UUID chatId;
@@ -91,9 +90,9 @@ public class GameController implements GameCallback {
private Future> gameFuture;
- public GameController(Game game, ConcurrentHashMap sessionPlayerMap, UUID tableId, UUID choosingPlayerId) {
+ public GameController(Game game, ConcurrentHashMap userPlayerMap, UUID tableId, UUID choosingPlayerId) {
gameSessionId = UUID.randomUUID();
- this.sessionPlayerMap = sessionPlayerMap;
+ this.userPlayerMap = userPlayerMap;
chatId = ChatManager.getInstance().createChatSession();
this.game = game;
this.tableId = tableId;
@@ -180,14 +179,15 @@ public class GameController implements GameCallback {
checkStart();
}
- private UUID getPlayerId(UUID sessionId) {
- return sessionPlayerMap.get(sessionId);
+ private UUID getPlayerId(UUID userId) {
+ return userPlayerMap.get(userId);
}
- public void join(UUID sessionId) {
- UUID playerId = sessionPlayerMap.get(sessionId);
- GameSession gameSession = new GameSession(game, sessionId, playerId);
+ public void join(UUID userId) {
+ UUID playerId = userPlayerMap.get(userId);
+ GameSession gameSession = new GameSession(game, userId, playerId);
gameSessions.put(playerId, gameSession);
+ UserManager.getInstance().getUser(userId).addGame(playerId, gameSession);
logger.info("player " + playerId + " has joined game " + game.getId());
ChatManager.getInstance().broadcast(chatId, "", game.getPlayer(playerId).getName() + " has joined the game", MessageColor.BLACK);
checkStart();
@@ -196,7 +196,7 @@ public class GameController implements GameCallback {
private synchronized void startGame() {
if (gameFuture == null) {
for (final Entry entry: gameSessions.entrySet()) {
- if (!entry.getValue().init(getGameView(entry.getKey()))) {
+ if (!entry.getValue().init()) {
logger.fatal("Unable to initialize client");
//TODO: generate client error message
return;
@@ -209,7 +209,7 @@ public class GameController implements GameCallback {
private void checkStart() {
if (allJoined()) {
- ThreadExecutor.getInstance().getRMIExecutor().execute(
+ ThreadExecutor.getInstance().getCallExecutor().execute(
new Runnable() {
@Override
public void run() {
@@ -228,27 +228,27 @@ public class GameController implements GameCallback {
return true;
}
- public void watch(UUID sessionId) {
- GameWatcher gameWatcher = new GameWatcher(sessionId, game.getId());
- watchers.put(sessionId, gameWatcher);
- gameWatcher.init(getGameView());
+ public void watch(UUID userId) {
+ GameWatcher gameWatcher = new GameWatcher(userId, game);
+ watchers.put(userId, gameWatcher);
+ gameWatcher.init();
ChatManager.getInstance().broadcast(chatId, "", " has started watching", MessageColor.BLACK);
}
- public void stopWatching(UUID sessionId) {
- watchers.remove(sessionId);
+ public void stopWatching(UUID userId) {
+ watchers.remove(userId);
ChatManager.getInstance().broadcast(chatId, "", " has stopped watching", MessageColor.BLACK);
}
- public void concede(UUID sessionId) {
- game.concede(getPlayerId(sessionId));
+ public void concede(UUID userId) {
+ game.concede(getPlayerId(userId));
}
- private void leave(UUID sessionId) {
- game.quit(getPlayerId(sessionId));
+ private void leave(UUID userId) {
+ game.quit(getPlayerId(userId));
}
- public void cheat(UUID sessionId, UUID playerId, DeckCardLists deckList) {
+ public void cheat(UUID userId, UUID playerId, DeckCardLists deckList) {
Deck deck;
try {
deck = Deck.load(deckList);
@@ -263,7 +263,7 @@ public class GameController implements GameCallback {
updateGame();
}
- public boolean cheat(UUID sessionId, UUID playerId, String cardName) {
+ public boolean cheat(UUID userId, UUID playerId, String cardName) {
Card card = Sets.findCard(cardName, true);
if (card != null) {
Set cards = new HashSet();
@@ -276,30 +276,30 @@ public class GameController implements GameCallback {
}
}
- public void kill(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- GameSession session = gameSessions.get(sessionPlayerMap.get(sessionId));
- if (session != null) session.destroy();
- gameSessions.remove(sessionPlayerMap.get(sessionId));
- leave(sessionId);
- sessionPlayerMap.remove(sessionId);
+ public void kill(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ gameSessions.get(userPlayerMap.get(userId)).setKilled();
+ gameSessions.remove(userPlayerMap.get(userId));
+ leave(userId);
+ userPlayerMap.remove(userId);
}
- if (watchers.containsKey(sessionId)) {
- watchers.get(sessionId).setKilled();
- watchers.remove(sessionId);
+ if (watchers.containsKey(userId)) {
+ watchers.get(userId).setKilled();
+ watchers.remove(userId);
}
}
- public void timeout(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- ChatManager.getInstance().broadcast(chatId, "", game.getPlayer(sessionPlayerMap.get(sessionId)).getName() + " has timed out. Auto concede.", MessageColor.BLACK);
- concede(sessionId);
+ public void timeout(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ ChatManager.getInstance().broadcast(chatId, "", game.getPlayer(userPlayerMap.get(userId)).getName() + " has timed out. Auto concede.", MessageColor.BLACK);
+ concede(userId);
}
}
public void endGame(final String message) throws MageException {
for (final GameSession gameSession: gameSessions.values()) {
gameSession.gameOver(message);
+ gameSession.removeGame();
}
for (final GameWatcher gameWatcher: watchers.values()) {
gameWatcher.gameOver(message);
@@ -315,34 +315,34 @@ public class GameController implements GameCallback {
return chatId;
}
- public void sendPlayerUUID(UUID sessionId, UUID data) {
- gameSessions.get(sessionPlayerMap.get(sessionId)).sendPlayerUUID(data);
+ public void sendPlayerUUID(UUID userId, UUID data) {
+ gameSessions.get(userPlayerMap.get(userId)).sendPlayerUUID(data);
}
- public void sendPlayerString(UUID sessionId, String data) {
- gameSessions.get(sessionPlayerMap.get(sessionId)).sendPlayerString(data);
+ public void sendPlayerString(UUID userId, String data) {
+ gameSessions.get(userPlayerMap.get(userId)).sendPlayerString(data);
}
- public void sendPlayerBoolean(UUID sessionId, Boolean data) {
- gameSessions.get(sessionPlayerMap.get(sessionId)).sendPlayerBoolean(data);
+ public void sendPlayerBoolean(UUID userId, Boolean data) {
+ gameSessions.get(userPlayerMap.get(userId)).sendPlayerBoolean(data);
}
- public void sendPlayerInteger(UUID sessionId, Integer data) {
- gameSessions.get(sessionPlayerMap.get(sessionId)).sendPlayerInteger(data);
+ public void sendPlayerInteger(UUID userId, Integer data) {
+ gameSessions.get(userPlayerMap.get(userId)).sendPlayerInteger(data);
}
private synchronized void updateGame() {
- for (final Entry entry: gameSessions.entrySet()) {
- entry.getValue().update(getGameView(entry.getKey()));
+ for (final GameSession gameSession: gameSessions.values()) {
+ gameSession.update();
}
for (final GameWatcher gameWatcher: watchers.values()) {
- gameWatcher.update(getGameView());
+ gameWatcher.update();
}
}
private synchronized void ask(UUID playerId, String question) throws MageException {
if (gameSessions.containsKey(playerId))
- gameSessions.get(playerId).ask(question, getGameView(playerId));
+ gameSessions.get(playerId).ask(question);
informOthers(playerId);
}
@@ -361,41 +361,41 @@ public class GameController implements GameCallback {
private synchronized void target(UUID playerId, String question, Cards cards, List perms, Set targets, boolean required, Map options) throws MageException {
if (gameSessions.containsKey(playerId)) {
if (cards != null)
- gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), targets, required, getGameView(playerId), options);
+ gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), targets, required, options);
else if (perms != null) {
CardsView permsView = new CardsView();
for (Permanent perm: perms) {
permsView.put(perm.getId(), new PermanentView(perm, game.getCard(perm.getId())));
}
- gameSessions.get(playerId).target(question, permsView, targets, required, getGameView(playerId), options);
+ gameSessions.get(playerId).target(question, permsView, targets, required, options);
}
else
- gameSessions.get(playerId).target(question, new CardsView(), targets, required, getGameView(playerId), options);
+ gameSessions.get(playerId).target(question, new CardsView(), targets, required, options);
}
informOthers(playerId);
}
private synchronized void target(UUID playerId, String question, Collection extends Ability> abilities, boolean required, Map options) throws MageException {
if (gameSessions.containsKey(playerId))
- gameSessions.get(playerId).target(question, new CardsView(abilities, game), null, required, getGameView(playerId), options);
+ gameSessions.get(playerId).target(question, new CardsView(abilities, game), null, required, options);
informOthers(playerId);
}
private synchronized void select(UUID playerId, String message) throws MageException {
if (gameSessions.containsKey(playerId))
- gameSessions.get(playerId).select(message, getGameView(playerId));
+ gameSessions.get(playerId).select(message);
informOthers(playerId);
}
private synchronized void playMana(UUID playerId, String message) throws MageException {
if (gameSessions.containsKey(playerId))
- gameSessions.get(playerId).playMana(message, getGameView(playerId));
+ gameSessions.get(playerId).playMana(message);
informOthers(playerId);
}
private synchronized void playXMana(UUID playerId, String message) throws MageException {
if (gameSessions.containsKey(playerId))
- gameSessions.get(playerId).playXMana(message, getGameView(playerId));
+ gameSessions.get(playerId).playXMana(message);
informOthers(playerId);
}
@@ -420,11 +420,11 @@ public class GameController implements GameCallback {
final String message = "Waiting for " + game.getPlayer(playerId).getName();
for (final Entry entry: gameSessions.entrySet()) {
if (!entry.getKey().equals(playerId)) {
- entry.getValue().inform(message, getGameView(entry.getKey()));
+ entry.getValue().inform(message);
}
}
for (final GameWatcher watcher: watchers.values()) {
- watcher.inform(message, getGameView());
+ watcher.inform(message);
}
}
@@ -434,21 +434,8 @@ public class GameController implements GameCallback {
}
}
- private GameView getGameView() {
- return new GameView(game.getState(), game);
- }
-
public GameView getGameView(UUID playerId) {
- GameView gameView = new GameView(game.getState(), game);
- gameView.setHand(new CardsView(game.getPlayer(playerId).getHand().getCards(game)));
-
- List list = new ArrayList();
- for (Entry entry : game.getState().getLookedAt(playerId).entrySet()) {
- list.add(new LookedAtView(entry.getKey(), entry.getValue(), game));
- }
- gameView.setLookedAt(list);
-
- return gameView;
+ return gameSessions.get(playerId).getGameView();
}
@Override
diff --git a/Mage.Server/src/main/java/mage/server/game/GameManager.java b/Mage.Server/src/main/java/mage/server/game/GameManager.java
index 661031c7bb..d674e68ba9 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameManager.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameManager.java
@@ -32,7 +32,6 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import mage.cards.decks.DeckCardLists;
import mage.game.Game;
-import mage.MageException;
import mage.view.GameView;
/**
@@ -50,15 +49,15 @@ public class GameManager {
private ConcurrentHashMap gameControllers = new ConcurrentHashMap();
- public UUID createGameSession(Game game, ConcurrentHashMap sessionPlayerMap, UUID tableId, UUID choosingPlayerId) {
- GameController gameController = new GameController(game, sessionPlayerMap, tableId, choosingPlayerId);
+ public UUID createGameSession(Game game, ConcurrentHashMap userPlayerMap, UUID tableId, UUID choosingPlayerId) {
+ GameController gameController = new GameController(game, userPlayerMap, tableId, choosingPlayerId);
gameControllers.put(game.getId(), gameController);
return gameController.getSessionId();
}
- public void joinGame(UUID gameId, UUID sessionId) {
+ public void joinGame(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).join(sessionId);
+ gameControllers.get(gameId).join(userId);
}
public void destroyChatSession(UUID gameId) {
@@ -71,66 +70,66 @@ public class GameManager {
return null;
}
- public void sendPlayerUUID(UUID gameId, UUID sessionId, UUID data) {
+ public void sendPlayerUUID(UUID gameId, UUID userId, UUID data) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).sendPlayerUUID(sessionId, data);
+ gameControllers.get(gameId).sendPlayerUUID(userId, data);
}
- public void sendPlayerString(UUID gameId, UUID sessionId, String data) {
+ public void sendPlayerString(UUID gameId, UUID userId, String data) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).sendPlayerString(sessionId, data);
+ gameControllers.get(gameId).sendPlayerString(userId, data);
}
- public void sendPlayerBoolean(UUID gameId, UUID sessionId, Boolean data) {
+ public void sendPlayerBoolean(UUID gameId, UUID userId, Boolean data) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).sendPlayerBoolean(sessionId, data);
+ gameControllers.get(gameId).sendPlayerBoolean(userId, data);
}
- public void sendPlayerInteger(UUID gameId, UUID sessionId, Integer data) {
+ public void sendPlayerInteger(UUID gameId, UUID userId, Integer data) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).sendPlayerInteger(sessionId, data);
+ gameControllers.get(gameId).sendPlayerInteger(userId, data);
}
- public void concedeGame(UUID gameId, UUID sessionId) {
+ public void concedeGame(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).concede(sessionId);
+ gameControllers.get(gameId).concede(userId);
}
- public void watchGame(UUID gameId, UUID sessionId) {
+ public void watchGame(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).watch(sessionId);
+ gameControllers.get(gameId).watch(userId);
}
- public void stopWatching(UUID gameId, UUID sessionId) {
+ public void stopWatching(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).stopWatching(sessionId);
+ gameControllers.get(gameId).stopWatching(userId);
}
- public void removeSession(UUID sessionId) {
+ public void removeSession(UUID userId) {
for (GameController controller: gameControllers.values()) {
- controller.kill(sessionId);
+ controller.kill(userId);
}
}
- public void kill(UUID gameId, UUID sessionId) {
+ public void kill(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).kill(sessionId);
+ gameControllers.get(gameId).kill(userId);
}
- public void cheat(UUID gameId, UUID sessionId, UUID playerId, DeckCardLists deckList) {
+ public void cheat(UUID gameId, UUID userId, UUID playerId, DeckCardLists deckList) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).cheat(sessionId, playerId, deckList);
+ gameControllers.get(gameId).cheat(userId, playerId, deckList);
}
- public boolean cheat(UUID gameId, UUID sessionId, UUID playerId, String cardName) {
+ public boolean cheat(UUID gameId, UUID userId, UUID playerId, String cardName) {
if (gameControllers.containsKey(gameId))
- return gameControllers.get(gameId).cheat(sessionId, playerId, cardName);
+ return gameControllers.get(gameId).cheat(userId, playerId, cardName);
return false;
}
- public void timeout(UUID gameId, UUID sessionId) {
+ public void timeout(UUID gameId, UUID userId) {
if (gameControllers.containsKey(gameId))
- gameControllers.get(gameId).timeout(sessionId);
+ gameControllers.get(gameId).timeout(userId);
}
public void removeGame(UUID gameId) {
@@ -142,7 +141,7 @@ public class GameManager {
gameControllers.get(gameId).saveGame();
}
- public GameView getGameView(UUID gameId, UUID sessionId, UUID playerId) {
+ public GameView getGameView(UUID gameId, UUID userId, UUID playerId) {
if (gameControllers.containsKey(gameId))
return gameControllers.get(gameId).getGameView(playerId);
return null;
diff --git a/Mage.Server/src/main/java/mage/server/game/GameSession.java b/Mage.Server/src/main/java/mage/server/game/GameSession.java
index 59e9658d83..a386c66ac7 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameSession.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameSession.java
@@ -29,25 +29,27 @@
package mage.server.game;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import mage.cards.Cards;
import mage.game.Game;
-import mage.MageException;
-import mage.interfaces.callback.CallbackException;
import mage.interfaces.callback.ClientCallback;
-import mage.server.Session;
-import mage.server.SessionManager;
+import mage.server.User;
+import mage.server.UserManager;
import mage.server.util.ConfigSettings;
import mage.server.util.ThreadExecutor;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.GameClientMessage;
import mage.view.GameView;
+import mage.view.LookedAtView;
/**
*
@@ -55,44 +57,42 @@ import mage.view.GameView;
*/
public class GameSession extends GameWatcher {
- private Game game;
private UUID playerId;
private ScheduledFuture> futureTimeout;
protected static ScheduledExecutorService timeoutExecutor = ThreadExecutor.getInstance().getTimeoutExecutor();
- public GameSession(Game game, UUID sessionId, UUID playerId) {
- super(sessionId, game.getId());
- this.game = game;
+ public GameSession(Game game, UUID userId, UUID playerId) {
+ super(userId, game);
this.playerId = playerId;
}
- public void ask(final String question, final GameView gameView) {
+ public void ask(final String question) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameAsk", game.getId(), new GameClientMessage(gameView, question)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameAsk", game.getId(), new GameClientMessage(getGameView(), question)));
}
}
}
- public void target(final String question, final CardsView cardView, final Set targets, final boolean required, final GameView gameView, final Map options) {
+ public void target(final String question, final CardsView cardView, final Set targets, final boolean required, final Map options) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameTarget", game.getId(), new GameClientMessage(gameView, question, cardView, targets, required, options)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameTarget", game.getId(), new GameClientMessage(getGameView(), question, cardView, targets, required, options)));
}
}
}
- public void select(final String message, final GameView gameView) {
+ public void select(final String message) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameSelect", game.getId(), new GameClientMessage(gameView, message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameSelect", game.getId(), new GameClientMessage(getGameView(), message)));
}
}
}
@@ -100,9 +100,9 @@ public class GameSession extends GameWatcher {
public void chooseAbility(final AbilityPickerView abilities) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameChooseAbility", game.getId(), abilities));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameChooseAbility", game.getId(), abilities));
}
}
}
@@ -110,29 +110,29 @@ public class GameSession extends GameWatcher {
public void choose(final String message, final Set choices) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameChoose", game.getId(), new GameClientMessage(choices.toArray(new String[0]), message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameChoose", game.getId(), new GameClientMessage(choices.toArray(new String[0]), message)));
}
}
}
- public void playMana(final String message, final GameView gameView) {
+ public void playMana(final String message) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gamePlayMana", game.getId(), new GameClientMessage(gameView, message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gamePlayMana", game.getId(), new GameClientMessage(getGameView(), message)));
}
}
}
- public void playXMana(final String message, final GameView gameView) {
+ public void playXMana(final String message) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gamePlayXMana", game.getId(), new GameClientMessage(gameView, message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gamePlayXMana", game.getId(), new GameClientMessage(getGameView(), message)));
}
}
}
@@ -140,30 +140,29 @@ public class GameSession extends GameWatcher {
public void getAmount(final String message, final int min, final int max) {
if (!killed) {
setupTimeout();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameSelectAmount", game.getId(), new GameClientMessage(message, min, max)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameSelectAmount", game.getId(), new GameClientMessage(message, min, max)));
}
}
}
public void revealCards(final String name, final CardsView cardView) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameReveal", game.getId(), new GameClientMessage(cardView, name)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameReveal", game.getId(), new GameClientMessage(cardView, name)));
}
}
}
-
private synchronized void setupTimeout() {
cancelTimeout();
futureTimeout = timeoutExecutor.schedule(
new Runnable() {
@Override
public void run() {
- GameManager.getInstance().timeout(gameId, sessionId);
+ GameManager.getInstance().timeout(game.getId(), userId);
}
},
ConfigSettings.getInstance().getMaxSecondsIdle(), TimeUnit.SECONDS
@@ -173,8 +172,6 @@ public class GameSession extends GameWatcher {
private synchronized void cancelTimeout() {
if (futureTimeout != null) {
futureTimeout.cancel(false);
- ((ThreadPoolExecutor)timeoutExecutor).getQueue().remove(futureTimeout);
- //System.out.println("tasks:"+ ((ThreadPoolExecutor)timeoutExecutor).getTaskCount());
}
}
@@ -197,9 +194,33 @@ public class GameSession extends GameWatcher {
cancelTimeout();
game.getPlayer(playerId).setResponseInteger(data);
}
+
+ @Override
+ public GameView getGameView() {
+ GameView gameView = new GameView(game.getState(), game);
+ gameView.setHand(new CardsView(game.getPlayer(playerId).getHand().getCards(game)));
- public void destroy() {
- cancelTimeout();
- setKilled();
+ List list = new ArrayList();
+ for (Entry entry : game.getState().getLookedAt(playerId).entrySet()) {
+ list.add(new LookedAtView(entry.getKey(), entry.getValue(), game));
+ }
+ gameView.setLookedAt(list);
+
+ return gameView;
}
+
+ public void removeGame() {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null)
+ user.removeGame(playerId);
+ }
+
+ public UUID getGameId() {
+ return game.getId();
+ }
+
+ public void kill() {
+ game.quit(playerId);
+ }
+
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java
index 6f8ceb38d6..dbdd48e19c 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java
@@ -30,12 +30,10 @@ package mage.server.game;
import java.rmi.RemoteException;
import java.util.UUID;
-import java.util.logging.Level;
-import mage.MageException;
-import mage.interfaces.callback.CallbackException;
+import mage.game.Game;
import mage.interfaces.callback.ClientCallback;
-import mage.server.Session;
-import mage.server.SessionManager;
+import mage.server.User;
+import mage.server.UserManager;
import mage.view.GameClientMessage;
import mage.view.GameView;
import org.apache.log4j.Logger;
@@ -48,69 +46,73 @@ public class GameWatcher {
protected final static Logger logger = Logger.getLogger(GameWatcher.class);
- protected UUID sessionId;
- protected UUID gameId;
+ protected UUID userId;
+ protected Game game;
protected boolean killed = false;
- public GameWatcher(UUID sessionId, UUID gameId) {
- this.sessionId = sessionId;
- this.gameId = gameId;
+ public GameWatcher(UUID userId, Game game) {
+ this.userId = userId;
+ this.game = game;
}
- public boolean init(final GameView gameView) {
+ public boolean init() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameInit", gameId, gameView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameInit", game.getId(), getGameView()));
return true;
}
}
return false;
}
- public void update(final GameView gameView) {
+ public void update() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameUpdate", gameId, gameView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameUpdate", game.getId(), getGameView()));
}
}
}
- public void inform(final String message, final GameView gameView) {
+ public void inform(final String message) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameInform", gameId, new GameClientMessage(gameView, message)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameInform", game.getId(), new GameClientMessage(getGameView(), message)));
}
}
}
public void gameOver(final String message) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameOver", gameId, message));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameOver", game.getId(), message));
}
}
}
public void gameError(final String message) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("gameError", gameId, message));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("gameError", game.getId(), message));
}
}
}
protected void handleRemoteException(RemoteException ex) {
logger.fatal("GameWatcher error", ex);
- GameManager.getInstance().kill(gameId, sessionId);
+ GameManager.getInstance().kill(game.getId(), userId);
}
public void setKilled() {
killed = true;
}
+ public GameView getGameView() {
+ return new GameView(game.getState(), game);
+ }
+
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java
index 4c11cafaf7..8c5a527e13 100644
--- a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java
+++ b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java
@@ -45,14 +45,14 @@ import mage.view.TableView;
public interface GamesRoom extends Room {
public List getTables();
- public boolean joinTable(UUID sessionId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException;
- public boolean joinTournamentTable(UUID sessionId, UUID tableId, String name, String playerType, int skill) throws GameException;
- public TableView createTable(UUID sessionId, MatchOptions options);
- public TableView createTournamentTable(UUID sessionId, TournamentOptions options);
- public void removeTable(UUID sessionId, UUID tableId);
+ public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException;
+ public boolean joinTournamentTable(UUID userId, UUID tableId, String name, String playerType, int skill) throws GameException;
+ public TableView createTable(UUID userId, MatchOptions options);
+ public TableView createTournamentTable(UUID userId, TournamentOptions options);
+ public void removeTable(UUID userId, UUID tableId);
public void removeTable(UUID tableId);
public TableView getTable(UUID tableId);
- public void leaveTable(UUID sessionId, UUID tableId);
- public boolean watchTable(UUID sessionId, UUID tableId) throws MageException;
+ public void leaveTable(UUID userId, UUID tableId);
+ public boolean watchTable(UUID userId, UUID tableId) throws MageException;
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
index 26e6a8dede..b2346b67cc 100644
--- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
+++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
@@ -64,33 +64,33 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
}
@Override
- public boolean joinTable(UUID sessionId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
+ public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException {
if (tables.containsKey(tableId)) {
- return TableManager.getInstance().joinTable(sessionId, tableId, name, playerType, skill, deckList);
+ return TableManager.getInstance().joinTable(userId, tableId, name, playerType, skill, deckList);
} else {
return false;
}
}
@Override
- public TableView createTable(UUID sessionId, MatchOptions options) {
- Table table = TableManager.getInstance().createTable(this.getRoomId(), sessionId, options);
+ public TableView createTable(UUID userId, MatchOptions options) {
+ Table table = TableManager.getInstance().createTable(this.getRoomId(), userId, options);
tables.put(table.getId(), table);
return new TableView(table);
}
@Override
- public boolean joinTournamentTable(UUID sessionId, UUID tableId, String name, String playerType, int skill) throws GameException {
+ public boolean joinTournamentTable(UUID userId, UUID tableId, String name, String playerType, int skill) throws GameException {
if (tables.containsKey(tableId)) {
- return TableManager.getInstance().joinTournament(sessionId, tableId, name, playerType, skill);
+ return TableManager.getInstance().joinTournament(userId, tableId, name, playerType, skill);
} else {
return false;
}
}
@Override
- public TableView createTournamentTable(UUID sessionId, TournamentOptions options) {
- Table table = TableManager.getInstance().createTournamentTable(this.getRoomId(), sessionId, options);
+ public TableView createTournamentTable(UUID userId, TournamentOptions options) {
+ Table table = TableManager.getInstance().createTournamentTable(this.getRoomId(), userId, options);
tables.put(table.getId(), table);
return new TableView(table);
}
@@ -103,7 +103,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
}
@Override
- public void removeTable(UUID sessionId, UUID tableId) {
+ public void removeTable(UUID userId, UUID tableId) {
tables.remove(tableId);
}
@@ -115,13 +115,13 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
}
@Override
- public void leaveTable(UUID sessionId, UUID tableId) {
- TableManager.getInstance().leaveTable(sessionId, tableId);
+ public void leaveTable(UUID userId, UUID tableId) {
+ TableManager.getInstance().leaveTable(userId, tableId);
}
@Override
- public boolean watchTable(UUID sessionId, UUID tableId) throws MageException {
- return TableManager.getInstance().watchTable(sessionId, tableId);
+ public boolean watchTable(UUID userId, UUID tableId) throws MageException {
+ return TableManager.getInstance().watchTable(userId, tableId);
}
}
diff --git a/Mage.Server/src/main/java/mage/server/game/ReplayManager.java b/Mage.Server/src/main/java/mage/server/game/ReplayManager.java
index a945babe0e..a181936ecf 100644
--- a/Mage.Server/src/main/java/mage/server/game/ReplayManager.java
+++ b/Mage.Server/src/main/java/mage/server/game/ReplayManager.java
@@ -30,8 +30,7 @@ package mage.server.game;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-import mage.MageException;
-import mage.server.SessionManager;
+import mage.server.UserManager;
/**
*
@@ -48,26 +47,26 @@ public class ReplayManager {
private ConcurrentHashMap replaySessions = new ConcurrentHashMap();
- public void replayGame(UUID gameId, UUID sessionId) {
- ReplaySession replaySession = new ReplaySession(gameId, sessionId);
- replaySessions.put(gameId.toString() + sessionId.toString(), replaySession);
- SessionManager.getInstance().getSession(sessionId).replayGame(gameId);
+ public void replayGame(UUID gameId, UUID userId) {
+ ReplaySession replaySession = new ReplaySession(gameId, userId);
+ replaySessions.put(gameId.toString() + userId.toString(), replaySession);
+ UserManager.getInstance().getUser(userId).replayGame(gameId);
}
- public void startReplay(UUID gameId, UUID sessionId) {
- replaySessions.get(gameId.toString() + sessionId.toString()).replay();
+ public void startReplay(UUID gameId, UUID userId) {
+ replaySessions.get(gameId.toString() + userId.toString()).replay();
}
- public void stopReplay(UUID gameId, UUID sessionId) {
- replaySessions.get(gameId.toString() + sessionId.toString()).stop();
+ public void stopReplay(UUID gameId, UUID userId) {
+ replaySessions.get(gameId.toString() + userId.toString()).stop();
}
- public void nextPlay(UUID gameId, UUID sessionId) {
- replaySessions.get(gameId.toString() + sessionId.toString()).next();
+ public void nextPlay(UUID gameId, UUID userId) {
+ replaySessions.get(gameId.toString() + userId.toString()).next();
}
- public void previousPlay(UUID gameId, UUID sessionId) {
- replaySessions.get(gameId.toString() + sessionId.toString()).previous();
+ public void previousPlay(UUID gameId, UUID userId) {
+ replaySessions.get(gameId.toString() + userId.toString()).previous();
}
}
diff --git a/Mage.Server/src/main/java/mage/server/game/ReplaySession.java b/Mage.Server/src/main/java/mage/server/game/ReplaySession.java
index 7b24aaf092..ed26b7c1c0 100644
--- a/Mage.Server/src/main/java/mage/server/game/ReplaySession.java
+++ b/Mage.Server/src/main/java/mage/server/game/ReplaySession.java
@@ -31,11 +31,9 @@ package mage.server.game;
import java.util.UUID;
import mage.game.Game;
import mage.game.GameState;
-import mage.MageException;
-import mage.interfaces.callback.CallbackException;
import mage.interfaces.callback.ClientCallback;
-import mage.server.Session;
-import mage.server.SessionManager;
+import mage.server.User;
+import mage.server.UserManager;
import mage.view.GameView;
import org.apache.log4j.Logger;
@@ -47,18 +45,18 @@ public class ReplaySession implements GameCallback {
private final static Logger logger = Logger.getLogger(ReplaySession.class);
private GameReplay replay;
- protected UUID sessionId;
+ protected UUID userId;
- ReplaySession(UUID gameId, UUID sessionId) {
+ ReplaySession(UUID gameId, UUID userId) {
this.replay = new GameReplay(gameId);
- this.sessionId = sessionId;
+ this.userId = userId;
}
public void replay() {
replay.start();
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("replayInit", replay.getGame().getId(), new GameView(replay.next(), replay.getGame())));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("replayInit", replay.getGame().getId(), new GameView(replay.next(), replay.getGame())));
}
}
@@ -76,9 +74,9 @@ public class ReplaySession implements GameCallback {
@Override
public void gameResult(final String result) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("replayDone", replay.getGame().getId(), result));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("replayDone", replay.getGame().getId(), result));
}
}
@@ -87,9 +85,9 @@ public class ReplaySession implements GameCallback {
gameResult("game ended");
}
else {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("replayUpdate", replay.getGame().getId(), new GameView(state, game)));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("replayUpdate", replay.getGame().getId(), new GameView(state, game)));
}
}
}
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
index 5e8cfecec6..495b6b675d 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
@@ -31,7 +31,6 @@ package mage.server.tournament;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
import mage.cards.decks.Deck;
import mage.game.GameException;
import mage.game.Table;
@@ -46,6 +45,7 @@ import mage.game.tournament.TournamentPlayer;
import mage.MageException;
import mage.server.ChatManager;
import mage.server.TableManager;
+import mage.server.UserManager;
import mage.server.game.GamesRoomManager;
import mage.server.util.ThreadExecutor;
import mage.view.ChatMessage.MessageColor;
@@ -60,16 +60,15 @@ public class TournamentController {
private final static Logger logger = Logger.getLogger(TournamentController.class);
- private UUID sessionId;
private UUID chatId;
private UUID tableId;
+ private boolean started = false;
private Tournament tournament;
- private ConcurrentHashMap sessionPlayerMap = new ConcurrentHashMap();
+ private ConcurrentHashMap userPlayerMap = new ConcurrentHashMap();
private ConcurrentHashMap tournamentSessions = new ConcurrentHashMap();
- public TournamentController(Tournament tournament, ConcurrentHashMap sessionPlayerMap, UUID tableId) {
- sessionId = UUID.randomUUID();
- this.sessionPlayerMap = sessionPlayerMap;
+ public TournamentController(Tournament tournament, ConcurrentHashMap userPlayerMap, UUID tableId) {
+ this.userPlayerMap = userPlayerMap;
chatId = ChatManager.getInstance().createChatSession();
this.tournament = tournament;
this.tableId = tableId;
@@ -98,6 +97,9 @@ public class TournamentController {
case CONSTRUCT:
construct();
break;
+ case END:
+ endTournament();
+ break;
}
}
}
@@ -128,10 +130,11 @@ public class TournamentController {
checkStart();
}
- public synchronized void join(UUID sessionId) {
- UUID playerId = sessionPlayerMap.get(sessionId);
- TournamentSession tournamentSession = new TournamentSession(tournament, sessionId, tableId, playerId);
+ public synchronized void join(UUID userId) {
+ UUID playerId = userPlayerMap.get(userId);
+ TournamentSession tournamentSession = new TournamentSession(tournament, userId, tableId, playerId);
tournamentSessions.put(playerId, tournamentSession);
+ UserManager.getInstance().getUser(userId).addTournament(playerId, tournamentSession);
TournamentPlayer player = tournament.getPlayer(playerId);
player.setJoined();
logger.info("player " + playerId + " has joined tournament " + tournament.getId());
@@ -140,8 +143,8 @@ public class TournamentController {
}
private void checkStart() {
- if (allJoined()) {
- ThreadExecutor.getInstance().getRMIExecutor().execute(
+ if (!started && allJoined()) {
+ ThreadExecutor.getInstance().getCallExecutor().execute(
new Runnable() {
@Override
public void run() {
@@ -164,15 +167,24 @@ public class TournamentController {
private synchronized void startTournament() {
for (final Entry entry: tournamentSessions.entrySet()) {
- if (!entry.getValue().init(getTournamentView())) {
+ if (!entry.getValue().init()) {
logger.fatal("Unable to initialize client");
//TODO: generate client error message
return;
}
}
+ started = true;
tournament.nextStep();
}
+ private void endTournament() {
+ for (final TournamentSession tournamentSession: tournamentSessions.values()) {
+ tournamentSession.tournamentOver();
+ tournamentSession.removeTournament();
+ }
+ TableManager.getInstance().endTournament(tableId, tournament);
+ }
+
private void startMatch(TournamentPairing pair, MatchOptions matchOptions) {
try {
TableManager tableManager = TableManager.getInstance();
@@ -196,49 +208,49 @@ public class TournamentController {
TableManager.getInstance().construct(tableId);
}
- private void construct(UUID sessionId, Deck deck, int timeout) throws MageException {
- if (tournamentSessions.containsKey(sessionId))
- tournamentSessions.get(sessionId).construct(deck, timeout);
+ private void construct(UUID playerId, Deck deck, int timeout) throws MageException {
+ if (tournamentSessions.containsKey(playerId))
+ tournamentSessions.get(playerId).construct(deck, timeout);
}
- public void submitDeck(UUID sessionId, Deck deck) {
- tournamentSessions.get(sessionPlayerMap.get(sessionId)).submitDeck(deck);
+ public void submitDeck(UUID playerId, Deck deck) {
+ tournamentSessions.get(playerId).submitDeck(deck);
}
- public void timeout(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- TournamentPlayer player = tournament.getPlayer(sessionPlayerMap.get(sessionId));
- tournament.autoSubmit(sessionPlayerMap.get(sessionId), player.getDeck());
+ public void timeout(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ TournamentPlayer player = tournament.getPlayer(userPlayerMap.get(userId));
+ tournament.autoSubmit(userPlayerMap.get(userId), player.getDeck());
}
}
- public UUID getSessionId() {
- return this.sessionId;
- }
+// public UUID getSessionId() {
+// return this.sessionId;
+// }
public UUID getChatId() {
return chatId;
}
- public void kill(UUID sessionId) {
- if (sessionPlayerMap.containsKey(sessionId)) {
- tournamentSessions.get(sessionPlayerMap.get(sessionId)).setKilled();
- tournamentSessions.remove(sessionPlayerMap.get(sessionId));
- leave(sessionId);
- sessionPlayerMap.remove(sessionId);
+ public void kill(UUID userId) {
+ if (userPlayerMap.containsKey(userId)) {
+ tournamentSessions.get(userPlayerMap.get(userId)).setKilled();
+ tournamentSessions.remove(userPlayerMap.get(userId));
+ leave(userId);
+ userPlayerMap.remove(userId);
}
}
- private void leave(UUID sessionId) {
- tournament.leave(getPlayerId(sessionId));
+ private void leave(UUID userId) {
+ tournament.leave(getPlayerId(userId));
}
- private UUID getPlayerId(UUID sessionId) {
- return sessionPlayerMap.get(sessionId);
+ private UUID getPlayerId(UUID userId) {
+ return userPlayerMap.get(userId);
}
private UUID getPlayerSessionId(UUID playerId) {
- for (Entry entry: sessionPlayerMap.entrySet()) {
+ for (Entry entry: userPlayerMap.entrySet()) {
if (entry.getValue().equals(playerId))
return entry.getKey();
}
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java
index 87b673be42..0238d68696 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java
@@ -48,26 +48,25 @@ public class TournamentManager {
return INSTANCE;
}
- public UUID createTournamentSession(Tournament tournament, ConcurrentHashMap sessionPlayerMap, UUID tableId) {
- TournamentController tournamentController = new TournamentController(tournament, sessionPlayerMap, tableId);
+ public void createTournamentSession(Tournament tournament, ConcurrentHashMap userPlayerMap, UUID tableId) {
+ TournamentController tournamentController = new TournamentController(tournament, userPlayerMap, tableId);
controllers.put(tournament.getId(), tournamentController);
- return tournamentController.getSessionId();
}
- public void joinTournament(UUID tournamentId, UUID sessionId) {
- controllers.get(tournamentId).join(sessionId);
+ public void joinTournament(UUID tournamentId, UUID userId) {
+ controllers.get(tournamentId).join(userId);
}
- public void kill(UUID tournamentId, UUID sessionId) {
- controllers.get(tournamentId).kill(sessionId);
+ public void kill(UUID tournamentId, UUID userId) {
+ controllers.get(tournamentId).kill(userId);
}
- public void timeout(UUID tournamentId, UUID sessionId) {
- controllers.get(tournamentId).timeout(sessionId);
+ public void timeout(UUID tournamentId, UUID userId) {
+ controllers.get(tournamentId).timeout(userId);
}
- public void submitDeck(UUID tournamentId, UUID sessionId, Deck deck) {
- controllers.get(tournamentId).submitDeck(sessionId, deck);
+ public void submitDeck(UUID tournamentId, UUID playerId, Deck deck) {
+ controllers.get(tournamentId).submitDeck(playerId, deck);
}
public TournamentView getTournamentView(UUID tournamentId) {
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java
index e91ea8a63b..3e5a771f64 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java
@@ -32,16 +32,13 @@ import java.rmi.RemoteException;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
import mage.cards.decks.Deck;
import mage.game.tournament.Tournament;
import mage.MageException;
-import mage.interfaces.callback.CallbackException;
import mage.interfaces.callback.ClientCallback;
-import mage.server.Session;
-import mage.server.SessionManager;
+import mage.server.User;
+import mage.server.UserManager;
import mage.server.util.ThreadExecutor;
import mage.view.TournamentView;
import org.apache.log4j.Logger;
@@ -53,7 +50,7 @@ import org.apache.log4j.Logger;
public class TournamentSession {
protected final static Logger logger = Logger.getLogger(TournamentSession.class);
- protected UUID sessionId;
+ protected UUID userId;
protected UUID playerId;
protected UUID tableId;
protected Tournament tournament;
@@ -62,46 +59,38 @@ public class TournamentSession {
private ScheduledFuture> futureTimeout;
protected static ScheduledExecutorService timeoutExecutor = ThreadExecutor.getInstance().getTimeoutExecutor();
- public TournamentSession(Tournament tournament, UUID sessionId, UUID tableId, UUID playerId) {
- this.sessionId = sessionId;
+ public TournamentSession(Tournament tournament, UUID userId, UUID tableId, UUID playerId) {
+ this.userId = userId;
this.tournament = tournament;
this.playerId = playerId;
this.tableId = tableId;
}
- public boolean init(final TournamentView tournamentView) {
+ public boolean init() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("tournamentInit", tournament.getId(), tournamentView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("tournamentInit", tournament.getId(), getTournamentView()));
return true;
}
}
return false;
}
-// public boolean waitForAck(String message) {
-// Session session = SessionManager.getInstance().getSession(sessionId);
-// do {
-// //TODO: add timeout
-// } while (!session.getAckMessage().equals(message) && !killed);
-// return true;
-// }
-
- public void update(final TournamentView tournamentView) {
+ public void update() {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("tournamentUpdate", tournament.getId(), tournamentView));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("tournamentUpdate", tournament.getId(), getTournamentView()));
}
}
}
public void gameOver(final String message) {
if (!killed) {
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null) {
- session.fireCallback(new ClientCallback("tournamentOver", tournament.getId(), message));
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.fireCallback(new ClientCallback("tournamentOver", tournament.getId(), message));
}
}
}
@@ -109,9 +98,10 @@ public class TournamentSession {
public void construct(Deck deck, int timeout) throws MageException {
if (!killed) {
setupTimeout(timeout);
- Session session = SessionManager.getInstance().getSession(sessionId);
- if (session != null)
- session.construct(deck, tableId, timeout);
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null) {
+ user.construct(deck, tableId, timeout);
+ }
}
}
@@ -122,7 +112,7 @@ public class TournamentSession {
protected void handleRemoteException(RemoteException ex) {
logger.fatal("TournamentSession error ", ex);
- TournamentManager.getInstance().kill(tournament.getId(), sessionId);
+ TournamentManager.getInstance().kill(tournament.getId(), userId);
}
public void setKilled() {
@@ -136,7 +126,7 @@ public class TournamentSession {
new Runnable() {
@Override
public void run() {
- TournamentManager.getInstance().timeout(tournament.getId(), sessionId);
+ TournamentManager.getInstance().timeout(tournament.getId(), userId);
}
},
seconds, TimeUnit.SECONDS
@@ -147,8 +137,25 @@ public class TournamentSession {
private synchronized void cancelTimeout() {
if (futureTimeout != null) {
futureTimeout.cancel(false);
- ((ThreadPoolExecutor)timeoutExecutor).getQueue().remove(futureTimeout);
}
}
+ public void removeTournament() {
+ User user = UserManager.getInstance().getUser(userId);
+ if (user != null)
+ user.removeTournament(playerId);
+ }
+
+ private TournamentView getTournamentView() {
+ return new TournamentView(tournament);
+ }
+
+ public UUID getTournamentId() {
+ return tournament.getId();
+ }
+
+ void tournamentOver() {
+ //TODO: implement this
+ }
+
}
diff --git a/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java b/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java
index 318aa379b2..f2844fd5bb 100644
--- a/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java
+++ b/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java
@@ -36,13 +36,13 @@ import java.util.concurrent.*;
*/
public class ThreadExecutor {
- private static ExecutorService rmiExecutor = Executors.newCachedThreadPool();
- private static ExecutorService gameExecutor = Executors.newFixedThreadPool(ConfigSettings.getInstance().getMaxGameThreads());
- private static ScheduledExecutorService timeoutExecutor = Executors.newScheduledThreadPool(5);
+ private static final ExecutorService callExecutor = Executors.newCachedThreadPool();
+ private static final ExecutorService gameExecutor = Executors.newFixedThreadPool(ConfigSettings.getInstance().getMaxGameThreads());
+ private static final ScheduledExecutorService timeoutExecutor = Executors.newScheduledThreadPool(5);
static {
- ((ThreadPoolExecutor)rmiExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
- ((ThreadPoolExecutor)rmiExecutor).allowCoreThreadTimeOut(true);
+ ((ThreadPoolExecutor)callExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
+ ((ThreadPoolExecutor)callExecutor).allowCoreThreadTimeOut(true);
((ThreadPoolExecutor)gameExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
((ThreadPoolExecutor)gameExecutor).allowCoreThreadTimeOut(true);
((ThreadPoolExecutor)timeoutExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
@@ -57,8 +57,8 @@ public class ThreadExecutor {
private ThreadExecutor() {}
- public ExecutorService getRMIExecutor() {
- return rmiExecutor;
+ public ExecutorService getCallExecutor() {
+ return callExecutor;
}
public ExecutorService getGameExecutor() {
diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml
index 533e8508cc..bbddd5f70d 100644
--- a/Mage.Sets/pom.xml
+++ b/Mage.Sets/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
org.mage
diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml
index d8b8db9b5a..064db269b6 100644
--- a/Mage.Tests/pom.xml
+++ b/Mage.Tests/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage-Tests
diff --git a/Mage/pom.xml b/Mage/pom.xml
index 1a93cb1b0e..733e7cd249 100644
--- a/Mage/pom.xml
+++ b/Mage/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
Mage
diff --git a/pom.xml b/pom.xml
index 5447f5fc6d..d734aabb87 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.mage
mage-root
- 0.7.4
+ 0.8.0
pom
Mage Root
Mage Root POM
@@ -31,10 +31,39 @@
Mage.Plugins
Mage.Server.Plugins
Mage.Server.Console
- Mage.Tests
+
+ jboss-public-repository
+ JBoss Repository
+ https://repository.jboss.org/nexus/content/groups/public
+
+
+ never
+
+
+ daily
+
+
+
+
+ jboss-deprecated-repository-group
+ JBoss Deprecated Maven Repository Group
+ https://repository.jboss.org/nexus/content/repositories/deprecated/
+
+ true
+ never
+
+
+ true
+ never
+
+
+
+ sonatype-org
+ https://maven.nuxeo.org/nexus/content/repositories/public/org/
+
mage.googlecode.com
https://mage.googlecode.com/hg/repository/
@@ -48,7 +77,7 @@
akathist-repository
Akathist Repository
http://www.9stmaryrd.com/maven
-
+
@@ -60,6 +89,6 @@
- 0.7.4
+ 0.8.0
-
\ No newline at end of file
+