diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 054ee7b5888..26f52877701 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -116,6 +116,7 @@ import mage.client.util.EDTExceptionHandler; import mage.client.util.GameManager; import mage.client.util.SettingsManager; import mage.client.util.SystemUtil; +import mage.client.util.audio.AudioManager; import mage.client.util.audio.MusicPlayer; import mage.client.util.gui.ArrowBuilder; import mage.client.util.stats.UpdateMemUsageTask; @@ -128,6 +129,8 @@ import mage.view.AbilityPickerView; import mage.view.CardsView; import mage.view.ChatMessage; import mage.view.DeckView; +import mage.view.DraftPickView; +import mage.view.DraftView; import mage.view.GameClientMessage; import mage.view.GameEndView; import mage.view.GameView; @@ -730,6 +733,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { } } + @Override public void showTournament(final UUID tournamentId) { SwingUtilities.invokeLater(new Runnable() { @Override @@ -1171,36 +1175,41 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { } } - public void showDeckEditor(DeckEditorMode mode, Deck deck, UUID tableId, int time) { - String name; - if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) { - name = "Deck Editor - " + tableId.toString(); - } else { - if (deck != null) { - name = "Deck Editor - " + deck.getName(); - } else { - name = "Deck Editor"; - } - // use already open editor - JInternalFrame[] windows = desktopPane.getAllFramesInLayer(JLayeredPane.DEFAULT_LAYER); - for (JInternalFrame window : windows) { - if (window instanceof DeckEditorPane && window.getTitle().equals(name)) { - setActive((MagePane) window); - return; + public void showDeckEditor(final DeckEditorMode mode, final Deck deck, final UUID tableId, final int time) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + String name; + if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) { + name = "Deck Editor - " + tableId.toString(); + } else { + if (deck != null) { + name = "Deck Editor - " + deck.getName(); + } else { + name = "Deck Editor"; + } + // use already open editor + JInternalFrame[] windows = desktopPane.getAllFramesInLayer(JLayeredPane.DEFAULT_LAYER); + for (JInternalFrame window : windows) { + if (window instanceof DeckEditorPane && window.getTitle().equals(name)) { + setActive((MagePane) window); + return; + } + } + } + + try { + DeckEditorPane deckEditorPane = new DeckEditorPane(); + desktopPane.add(deckEditorPane, JLayeredPane.DEFAULT_LAYER); + deckEditorPane.setMaximum(true); + deckEditorPane.setVisible(true); + deckEditorPane.show(mode, deck, name, tableId, time); + setActive(deckEditorPane); + } catch (PropertyVetoException ex) { + logger.fatal(null, ex); } } - } - - try { - DeckEditorPane deckEditorPane = new DeckEditorPane(); - desktopPane.add(deckEditorPane, JLayeredPane.DEFAULT_LAYER); - deckEditorPane.setMaximum(true); - deckEditorPane.setVisible(true); - deckEditorPane.show(mode, deck, name, tableId, time); - setActive(deckEditorPane); - } catch (PropertyVetoException ex) { - logger.fatal(null, ex); - } + }); } public void showUserRequestDialog(final UserRequestMessage userRequestMessage) { @@ -1373,12 +1382,17 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { return drafts.get(draftId); } - public static void removeDraft(UUID draftId) { - DraftPanel draftPanel = drafts.get(draftId); - if (draftPanel != null) { - drafts.remove(draftId); - draftPanel.hideDraft(); - } + public static void removeDraft(final UUID draftId) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + DraftPanel draftPanel = drafts.get(draftId); + if (draftPanel != null) { + drafts.remove(draftId); + draftPanel.hideDraft(); + } + } + }); } public static void addDraft(UUID draftId, DraftPanel draftPanel) { @@ -1674,7 +1688,68 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { protected void construct(Deck deck, UUID tableId, int time) { showDeckEditor(DeckEditorMode.LIMITED_BUILDING, deck, tableId, time); } - + + @Override + public void startDraft(UUID draftId, UUID playerId) { + showDraft(draftId); + logger.info("Draft " + draftId + " started for player " + playerId); + } + + @Override + public void draftInit(final UUID draftId, final DraftPickView draftPickView) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + DraftPanel panel = MageFrame.getDraft(draftId); + if (panel != null) { + panel.loadBooster(draftPickView); + } + } + }); + } + + @Override + public void draftUpdate(final UUID draftId, final DraftView draftView) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + DraftPanel panel = MageFrame.getDraft(draftId); + if (panel != null) { + panel.updateDraft(draftView); + } + } + }); + } + + @Override + public void draftPick(final UUID draftId, final DraftPickView draftPickView) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + DraftPanel panel = MageFrame.getDraft(draftId); + if (panel != null) { + try { + panel.loadBooster(draftPickView); + } catch (Exception ex) { + logger.error("arrrgh", ex); + } + } + } + }); + } + + @Override + public void draftOver(UUID draftId) { + removeDraft(draftId); + } + + @Override + public void tournamentStarted(UUID tournamentId) { + showTournament(tournamentId); + AudioManager.playTournamentStarted(); + logger.info("Tournament " + tournamentId + " started"); + } + } class MagePaneMenuItem extends JCheckBoxMenuItem { diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java index 3bd892b828a..2b4c8613e3e 100644 --- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java +++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java @@ -63,7 +63,6 @@ import mage.client.util.ImageHelper; import mage.client.util.Listener; import mage.client.util.audio.AudioManager; import mage.client.util.gui.BufferedImageBuilder; -//import mage.remote.Session; import mage.view.CardsView; import mage.view.DraftPickView; import mage.view.DraftView; @@ -278,7 +277,7 @@ public class DraftPanel extends javax.swing.JPanel { public void event(Event event) { if (event.getEventName().equals("pick-a-card")) { SimpleCardView source = (SimpleCardView) event.getSource(); - DraftPickView view = client.sendCardPick(draftId, source.getId(), cardsHidden); + DraftPickView view = client.pickCard(draftId, source.getId(), cardsHidden); if (view != null) { loadCardsToPickedCardsArea(view.getPicks()); draftBooster.loadBooster(emptyView, bigCard); @@ -288,7 +287,7 @@ public class DraftPanel extends javax.swing.JPanel { } if (event.getEventName().equals("mark-a-card")) { SimpleCardView source = (SimpleCardView) event.getSource(); - client.sendCardMark(draftId, source.getId()); + client.markCard(draftId, source.getId()); } } } diff --git a/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java b/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java index ea6e0469974..ebfae09dceb 100644 --- a/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java +++ b/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java @@ -15,6 +15,8 @@ import mage.view.AbilityPickerView; import mage.view.CardsView; import mage.view.ChatMessage; import mage.view.DeckView; +import mage.view.DraftPickView; +import mage.view.DraftView; import mage.view.GameClientMessage; import mage.view.GameEndView; import mage.view.GameView; @@ -234,6 +236,41 @@ public class MultiConnectTest { public void construct(UUID tableId, DeckView deck, int time) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } + + @Override + public void startDraft(UUID draftId, UUID playerId) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void draftInit(UUID draftId, DraftPickView draftPickView) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void draftUpdate(UUID draftId, DraftView draftView) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void draftPick(UUID draftId, DraftPickView draftPickView) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void draftOver(UUID draftId) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void showTournament(UUID tournamentId) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void tournamentStarted(UUID tournamentId) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } public static void main(String[] argv) throws Exception { diff --git a/Mage.Network/src/main/java/org/mage/network/Client.java b/Mage.Network/src/main/java/org/mage/network/Client.java index 0e4673077eb..ed8d0aaebfa 100644 --- a/Mage.Network/src/main/java/org/mage/network/Client.java +++ b/Mage.Network/src/main/java/org/mage/network/Client.java @@ -260,8 +260,13 @@ public class Client { return channel.id().asLongText(); } - public TableView createTournamentTable(UUID roomId, TournamentOptions tOptions) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public TableView createTournamentTable(UUID roomId, TournamentOptions options) { + try { + return clientMessageHandler.createTournamentTable(roomId, options); + } catch (Exception ex) { + logger.error("Error creating tournament table", ex); + } + return null; } public void setPreferences(UserDataView view) { @@ -282,7 +287,12 @@ public class Client { } public boolean startTournament(UUID roomId, UUID tableId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.startTournament(roomId, tableId); + } catch (Exception ex) { + logger.error("Error starting tournament", ex); + } + return false; } public boolean leaveTable(UUID roomId, UUID tableId) { @@ -306,7 +316,7 @@ public class Client { try { clientMessageHandler.sendPlayerAction(passPriorityAction, gameId, data); } catch (Exception ex) { - logger.error("Error swaping seats", ex); + logger.error("Error sending player action", ex); } } @@ -324,19 +334,38 @@ public class Client { } public UUID getTournamentChatId(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.getTournamentChatId(tournamentId); + } catch (Exception ex) { + logger.error("Error getting tournament chat room id", ex); + } + return null; } public boolean joinTournament(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.joinTournament(tournamentId); + } catch (Exception ex) { + logger.error("Error joining tournament", ex); + } + return false; } public void quitTournament(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + clientMessageHandler.quitTournament(tournamentId); + } catch (Exception ex) { + logger.error("Error quitting tournament", ex); + } } public TournamentView getTournament(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.getTournament(tournamentId); + } catch (Exception ex) { + logger.error("Error getting tournament", ex); + } + return null; } public void watchTable(UUID roomId, UUID tableId) { @@ -416,23 +445,45 @@ public class Client { } public void quitMatch(UUID gameId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + clientMessageHandler.quitMatch(gameId); + } catch (Exception ex) { + logger.error("Error quitting match", ex); + } } public boolean joinDraft(UUID draftId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.joinDraft(draftId); + } catch (Exception ex) { + logger.error("Error joining draft", ex); + } + return false; } - public DraftPickView sendCardPick(UUID draftId, UUID id, Set cardsHidden) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public DraftPickView pickCard(UUID draftId, UUID cardId, Set cardsHidden) { + try { + return clientMessageHandler.pickCard(draftId, cardId, cardsHidden); + } catch (Exception ex) { + logger.error("Error sending card pick", ex); + } + return null; } - public void sendCardMark(UUID draftId, UUID id) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public void markCard(UUID draftId, UUID cardId) { + try { + clientMessageHandler.markCard(draftId, cardId); + } catch (Exception ex) { + logger.error("Error marking card", ex); + } } public void quitDraft(UUID draftId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + clientMessageHandler.quitDraft(draftId); + } catch (Exception ex) { + logger.error("Error quitting draft", ex); + } } public void sendBroadcastMessage(String message) { diff --git a/Mage.Network/src/main/java/org/mage/network/Server.java b/Mage.Network/src/main/java/org/mage/network/Server.java index 4428e36cef6..c2161d23f68 100644 --- a/Mage.Network/src/main/java/org/mage/network/Server.java +++ b/Mage.Network/src/main/java/org/mage/network/Server.java @@ -34,7 +34,6 @@ import mage.view.DraftView; import mage.view.GameClientMessage; import mage.view.GameEndView; import mage.view.GameView; -import mage.view.TournamentView; import mage.view.UserRequestMessage; import org.apache.log4j.Logger; import org.mage.network.handlers.ExceptionHandler; @@ -48,6 +47,10 @@ import org.mage.network.messages.MessageType; import org.mage.network.messages.PingMessage; import org.mage.network.messages.callback.ChatMessageCallback; import org.mage.network.messages.callback.ConstructCallback; +import org.mage.network.messages.callback.DraftInitCallback; +import org.mage.network.messages.callback.DraftOverCallback; +import org.mage.network.messages.callback.DraftPickCallback; +import org.mage.network.messages.callback.DraftUpdateCallback; import org.mage.network.messages.callback.GameAskCallback; import org.mage.network.messages.callback.GameChooseAbilityCallback; import org.mage.network.messages.callback.GameChooseChoiceCallback; @@ -67,7 +70,10 @@ import org.mage.network.messages.callback.GameTargetCallback; import org.mage.network.messages.callback.GameUpdateCallback; import org.mage.network.messages.callback.InformClientCallback; import org.mage.network.messages.callback.JoinedTableCallback; +import org.mage.network.messages.callback.ShowTournamentCallback; import org.mage.network.messages.callback.SideboardCallback; +import org.mage.network.messages.callback.StartDraftCallback; +import org.mage.network.messages.callback.TournamentStartedCallback; import org.mage.network.messages.callback.UserRequestDialogCallback; /** @@ -305,27 +311,33 @@ public class Server { } public void startDraft(String sessionId, UUID draftId, UUID playerId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new StartDraftCallback(draftId, playerId)).addListener(WriteListener.getInstance()); } public void draftInit(String sessionId, UUID draftId, DraftPickView draftPickView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new DraftInitCallback(draftId, draftPickView)).addListener(WriteListener.getInstance()); } public void draftUpdate(String sessionId, UUID draftId, DraftView draftView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - public void draftInform(String sessionId, UUID draftId, DraftView draftView, String message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new DraftUpdateCallback(draftId, draftView)).addListener(WriteListener.getInstance()); } public void draftOver(String sessionId, UUID draftId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new DraftOverCallback(draftId)).addListener(WriteListener.getInstance()); } public void draftPick(String sessionId, UUID draftId, DraftPickView draftPickView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new DraftPickCallback(draftId, draftPickView)).addListener(WriteListener.getInstance()); } public void sideboard(String sessionId, UUID tableId, DeckView deck, int time, boolean limited) { @@ -340,25 +352,18 @@ public class Server { ch.writeAndFlush(new ConstructCallback(tableId, deck, time)).addListener(WriteListener.getInstance()); } - public void startTournament(String sessionId, UUID tournamentId, UUID playerId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public void tournamentStarted(String sessionId, UUID tournamentId, UUID playerId) { + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new TournamentStartedCallback(tournamentId, playerId)).addListener(WriteListener.getInstance()); } public void showTournament(String sessionId, UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + Channel ch = findChannel(sessionId); + if (ch != null) + ch.writeAndFlush(new ShowTournamentCallback(tournamentId)).addListener(WriteListener.getInstance()); } - public void tournamentInit(String sessionId, UUID tournamentId, TournamentView tournamentView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - public void tournamentUpdate(String sessionId, UUID tournamentId, TournamentView tournamentView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - public void tournamentOver(String sessionId, UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } public void watchGame(String sessionId, UUID gameId) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java index 11a0ee049f3..39b3db1e2fc 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java @@ -1,10 +1,17 @@ package org.mage.network.handlers.client; -import org.mage.network.messages.requests.JoinTournamentTableRequest; +import org.mage.network.messages.requests.GetTournamentChatIdRequest; +import org.mage.network.messages.requests.GetTournamentRequest; +import org.mage.network.messages.requests.JoinTournamentRequest; +import org.mage.network.messages.requests.StartTournamentRequest; +import org.mage.network.messages.requests.CreateTournamentRequest; +import org.mage.network.messages.requests.QuitTournamentRequest; +import org.mage.network.messages.requests.QuitMatchRequest; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import java.io.Serializable; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -12,8 +19,11 @@ import mage.cards.decks.DeckCardLists; import mage.constants.ManaType; import mage.constants.PlayerAction; import mage.game.match.MatchOptions; +import mage.game.tournament.TournamentOptions; +import mage.view.DraftPickView; import mage.view.RoomView; import mage.view.TableView; +import mage.view.TournamentView; import mage.view.UserDataView; import org.mage.network.handlers.WriteListener; import org.mage.network.interfaces.MageClient; @@ -23,11 +33,16 @@ import org.mage.network.messages.requests.ChatRoomIdRequest; import org.mage.network.messages.requests.CreateTableRequest; import org.mage.network.messages.requests.GetRoomRequest; import org.mage.network.messages.requests.JoinChatRequest; +import org.mage.network.messages.requests.JoinDraftRequest; import org.mage.network.messages.requests.JoinGameRequest; import org.mage.network.messages.requests.JoinTableRequest; +import org.mage.network.messages.requests.JoinTournamentTableRequest; import org.mage.network.messages.requests.LeaveChatRequest; import org.mage.network.messages.requests.LeaveTableRequest; +import org.mage.network.messages.requests.MarkCardRequest; +import org.mage.network.messages.requests.PickCardRequest; import org.mage.network.messages.requests.PlayerActionRequest; +import org.mage.network.messages.requests.QuitDraftRequest; import org.mage.network.messages.requests.RemoveTableRequest; import org.mage.network.messages.requests.SendFeedbackRequest; import org.mage.network.messages.requests.SendPlayerBooleanRequest; @@ -55,6 +70,8 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler uuidQueue = new LinkedBlockingQueue<>(); private final BlockingQueue roomViewQueue = new LinkedBlockingQueue<>(); private final BlockingQueue tableViewQueue = new LinkedBlockingQueue<>(); + private final BlockingQueue tournamentViewQueue = new LinkedBlockingQueue<>(); + private final BlockingQueue draftPickViewQueue = new LinkedBlockingQueue<>(); private final BlockingQueue> stringListQueue = new LinkedBlockingQueue<>(); public ClientMessageHandler (MageClient client) { @@ -114,6 +131,18 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler cardsHidden) throws Exception { + draftPickViewQueue.clear(); + ctx.writeAndFlush(new PickCardRequest(draftId, cardId, cardsHidden)).addListener(WriteListener.getInstance()); + return draftPickViewQueue.take(); + } + public boolean leaveTable(UUID roomId, UUID tableId) throws Exception { booleanQueue.clear(); ctx.writeAndFlush(new LeaveTableRequest(roomId, tableId)).addListener(WriteListener.getInstance()); @@ -142,6 +171,14 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler list) { stringListQueue.offer(list); } @@ -218,4 +263,42 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler options); - public void gameEndInfo(UUID gameId, GameEndView view); + void gameEndInfo(UUID gameId, GameEndView view); - public void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage); + void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage); - public void sideboard(UUID tableId, DeckView deck, int time, boolean limited); - public void construct(UUID tableId, DeckView deck, int time); + void sideboard(UUID tableId, DeckView deck, int time, boolean limited); + void construct(UUID tableId, DeckView deck, int time); + + void startDraft(UUID draftId, UUID playerId); + void draftInit(UUID draftId, DraftPickView draftPickView); + void draftUpdate(UUID draftId, DraftView draftView); + void draftPick(UUID draftId, DraftPickView draftPickView); + void draftOver(UUID draftId); + + void showTournament(UUID tournamentId); + void tournamentStarted(UUID tournamentId); } diff --git a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java index dc6d0ee0c1f..f39511ee7a9 100644 --- a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java +++ b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java @@ -2,17 +2,21 @@ package org.mage.network.interfaces; import java.io.Serializable; import java.util.List; +import java.util.Set; import java.util.UUID; import mage.cards.decks.DeckCardLists; import mage.constants.ManaType; import mage.constants.PlayerAction; import mage.game.match.MatchOptions; +import mage.game.tournament.TournamentOptions; import mage.interfaces.ServerState; import mage.remote.Connection; import mage.remote.DisconnectReason; import mage.utils.MageVersion; +import mage.view.DraftPickView; import mage.view.RoomView; import mage.view.TableView; +import mage.view.TournamentView; import mage.view.UserDataView; /** @@ -45,6 +49,7 @@ public interface MageServer { boolean joinTournamentTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password); boolean startMatch(String sessionId, UUID roomId, UUID tableId); + void quitMatch(UUID gameId, String sessionId); UUID joinGame(UUID gameId, String sessionId); void sendPlayerUUID(UUID gameId, String sessionId, UUID data); void sendPlayerString(UUID gameId, String sessionId, String data); @@ -55,6 +60,18 @@ public interface MageServer { boolean submitDeck(String sessionId, UUID tableId, DeckCardLists deckList); void updateDeck(String sessionId, UUID tableId, DeckCardLists deckList); + + boolean joinDraft(UUID draftId, String sessionId); + void quitDraft(UUID draftId, String sessionId); + void markCard(UUID draftId, String sessionId, UUID cardPick); + DraftPickView pickCard(UUID draftId, String sessionId, UUID cardPick, Set hiddenCards); + + TableView createTournamentTable(String sessionId, UUID roomId, TournamentOptions options); + boolean startTournament(String sessionId, UUID roomId, UUID tableId); + UUID getTournamentChatId(UUID tournamentId); + TournamentView getTournament(UUID tournamentId); + boolean joinTournament(UUID tournamentId, String sessionId); + void quitTournament(UUID tournamentId, String sessionId); void pingTime(long milliSeconds, String sessionId); diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftInitCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftInitCallback.java new file mode 100644 index 00000000000..215b23b1f9a --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftInitCallback.java @@ -0,0 +1,26 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import mage.view.DraftPickView; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class DraftInitCallback extends ClientMessage { + private final UUID draftId; + private final DraftPickView draftPickView; + + public DraftInitCallback(UUID draftId, DraftPickView draftPickView) { + this.draftId = draftId; + this.draftPickView = draftPickView; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().draftInit(draftId, draftPickView); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftOverCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftOverCallback.java new file mode 100644 index 00000000000..33fdf5809f2 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftOverCallback.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class DraftOverCallback extends ClientMessage { + private final UUID draftId; + + public DraftOverCallback(UUID draftId) { + this.draftId = draftId; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().draftOver(draftId); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftPickCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftPickCallback.java new file mode 100644 index 00000000000..4124ebb485a --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftPickCallback.java @@ -0,0 +1,26 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import mage.view.DraftPickView; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class DraftPickCallback extends ClientMessage { + private final UUID draftId; + private final DraftPickView draftPickView; + + public DraftPickCallback(UUID draftId, DraftPickView draftPickView) { + this.draftId = draftId; + this.draftPickView = draftPickView; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().draftPick(draftId, draftPickView); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftUpdateCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftUpdateCallback.java new file mode 100644 index 00000000000..c5661b4c237 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/DraftUpdateCallback.java @@ -0,0 +1,26 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import mage.view.DraftView; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class DraftUpdateCallback extends ClientMessage { + private final UUID draftId; + private final DraftView draftView; + + public DraftUpdateCallback(UUID draftId, DraftView draftView) { + this.draftId = draftId; + this.draftView = draftView; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().draftUpdate(draftId, draftView); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/ShowTournamentCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/ShowTournamentCallback.java new file mode 100644 index 00000000000..8f3de4e8e8a --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/ShowTournamentCallback.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class ShowTournamentCallback extends ClientMessage { + private final UUID tournamentId; + + public ShowTournamentCallback(UUID tournamentId) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().showTournament(tournamentId); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/StartDraftCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/StartDraftCallback.java new file mode 100644 index 00000000000..e72112447af --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/StartDraftCallback.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class StartDraftCallback extends ClientMessage { + private final UUID draftId; + private final UUID playerId; + + public StartDraftCallback(UUID draftId, UUID playerId) { + this.draftId = draftId; + this.playerId = playerId; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().startDraft(draftId, playerId); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/callback/TournamentStartedCallback.java b/Mage.Network/src/main/java/org/mage/network/messages/callback/TournamentStartedCallback.java new file mode 100644 index 00000000000..f8486b8916b --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/callback/TournamentStartedCallback.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.callback; + +import java.util.UUID; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class TournamentStartedCallback extends ClientMessage { + private final UUID tournamentId; + + public TournamentStartedCallback(UUID tournamentId, UUID tournamentId0) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.getClient().tournamentStarted(tournamentId); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/ChatMessageRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/ChatMessageRequest.java index 00d009d5ba8..22f99bb9eb5 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/ChatMessageRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/ChatMessageRequest.java @@ -20,7 +20,7 @@ public class ChatMessageRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.receiveChatMessage(chatId, ctx.channel().id().asLongText(), message); + server.receiveChatMessage(chatId, getSessionId(ctx), message); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTableRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTableRequest.java index 883c35c721e..547294f7c7e 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTableRequest.java @@ -23,7 +23,7 @@ public class CreateTableRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new TableViewResponse(server.createTable(ctx.channel().id().asLongText(), roomId, options))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new TableViewResponse(server.createTable(getSessionId(ctx), roomId, options))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTournamentRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTournamentRequest.java new file mode 100644 index 00000000000..150cc983777 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/CreateTournamentRequest.java @@ -0,0 +1,28 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import mage.game.tournament.TournamentOptions; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.TableViewResponse; + +/** + * + * @author BetaSteward + */ +public class CreateTournamentRequest extends ServerRequest { + private final UUID roomId; + private final TournamentOptions options; + + public CreateTournamentRequest(UUID roomId, TournamentOptions options) { + this.roomId = roomId; + this.options = options; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new TableViewResponse(server.createTournamentTable(getSessionId(ctx), roomId, options))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentChatIdRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentChatIdRequest.java new file mode 100644 index 00000000000..4fc653e6e7a --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentChatIdRequest.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.UUIDResponse; + +/** + * + * @author BetaSteward + */ +public class GetTournamentChatIdRequest extends ServerRequest { + private final UUID tournamentId; + + public GetTournamentChatIdRequest(UUID tournamentId) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new UUIDResponse(server.getTournamentChatId(tournamentId))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentRequest.java new file mode 100644 index 00000000000..5e61056489e --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/GetTournamentRequest.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.requests; + +import org.mage.network.messages.responses.GetTournamentResponse; +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public class GetTournamentRequest extends ServerRequest { + private final UUID tournamentId; + + public GetTournamentRequest(UUID tournamentId) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new GetTournamentResponse(server.getTournament(tournamentId))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinChatRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinChatRequest.java index a90dd644f02..33b3588956a 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinChatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinChatRequest.java @@ -18,7 +18,7 @@ public class JoinChatRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.joinChat(chatId, ctx.channel().id().asLongText()); + server.joinChat(chatId, getSessionId(ctx)); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinDraftRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinDraftRequest.java new file mode 100644 index 00000000000..6e3ee6ffcb4 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinDraftRequest.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.BooleanResponse; + +/** + * + * @author BetaSteward + */ +public class JoinDraftRequest extends ServerRequest { + private final UUID draftId; + + public JoinDraftRequest(UUID draftId) { + this.draftId = draftId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new BooleanResponse(server.joinDraft(draftId, getSessionId(ctx)))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinGameRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinGameRequest.java index dcc53114324..42f563eb881 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinGameRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinGameRequest.java @@ -20,7 +20,7 @@ public class JoinGameRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new UUIDResponse(server.joinGame(gameId, ctx.channel().id().asLongText()))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new UUIDResponse(server.joinGame(gameId, getSessionId(ctx)))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTableRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTableRequest.java index ca64d88197b..e021fd6026d 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTableRequest.java @@ -33,7 +33,7 @@ public class JoinTableRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new BooleanResponse(server.joinTable(ctx.channel().id().asLongText(), roomId, tableId, name, playerType, skill, deckList, password))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new BooleanResponse(server.joinTable(getSessionId(ctx), roomId, tableId, name, playerType, skill, deckList, password))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentRequest.java new file mode 100644 index 00000000000..6be9579ba8c --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentRequest.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.BooleanResponse; + +/** + * + * @author BetaSteward + */ +public class JoinTournamentRequest extends ServerRequest { + private final UUID tournamentId; + + public JoinTournamentRequest(UUID tournamentId) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new BooleanResponse(server.joinTournament(tournamentId, getSessionId(ctx)))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentTableRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentTableRequest.java index 797dd67db34..b3eefc93870 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/JoinTournamentTableRequest.java @@ -32,7 +32,7 @@ public class JoinTournamentTableRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new BooleanResponse(server.joinTournamentTable(ctx.channel().id().asLongText(), roomId, tableId, name, playerType, skill, deckList, password))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new BooleanResponse(server.joinTournamentTable(getSessionId(ctx), roomId, tableId, name, playerType, skill, deckList, password))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveChatRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveChatRequest.java index 6b5059a7607..768f52e855a 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveChatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveChatRequest.java @@ -18,7 +18,7 @@ public class LeaveChatRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.leaveChat(chatId, ctx.channel().id().asLongText()); + server.leaveChat(chatId, getSessionId(ctx)); } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveTableRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveTableRequest.java index 4c501961e8f..cf6f8c99a89 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/LeaveTableRequest.java @@ -22,7 +22,7 @@ public class LeaveTableRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new BooleanResponse(server.leaveTable(ctx.channel().id().asLongText(), roomId, tableId))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new BooleanResponse(server.leaveTable(getSessionId(ctx), roomId, tableId))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/MarkCardRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/MarkCardRequest.java new file mode 100644 index 00000000000..34cb144c377 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/MarkCardRequest.java @@ -0,0 +1,25 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public class MarkCardRequest extends ServerRequest { + private final UUID draftId; + private final UUID cardId; + + public MarkCardRequest(UUID draftId, UUID cardId) { + this.draftId = draftId; + this.cardId = cardId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.markCard(draftId, getSessionId(ctx), cardId); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/PickCardRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/PickCardRequest.java new file mode 100644 index 00000000000..af82aa5ceb9 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/PickCardRequest.java @@ -0,0 +1,31 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.PickCardResponse; + +/** + * + * @author BetaSteward + */ +public class PickCardRequest extends ServerRequest { + private final UUID draftId; + private final UUID cardId; + private final Set cardsHidden = new HashSet<>(); + + public PickCardRequest(UUID draftId, UUID cardId, Set cardsHidden) { + this.draftId = draftId; + this.cardId = cardId; + this.cardsHidden.addAll(cardsHidden); + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new PickCardResponse(server.pickCard(draftId, getSessionId(ctx), cardId, cardsHidden))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/PlayerActionRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/PlayerActionRequest.java index aec8776fae5..ccd200e0f84 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/PlayerActionRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/PlayerActionRequest.java @@ -24,7 +24,7 @@ public class PlayerActionRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerAction(playerAction, gameId, ctx.channel().id().asLongText(), data); + server.sendPlayerAction(playerAction, gameId, getSessionId(ctx), data); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitDraftRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitDraftRequest.java new file mode 100644 index 00000000000..2f91d2a7ac1 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitDraftRequest.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public class QuitDraftRequest extends ServerRequest { + private final UUID draftId; + + public QuitDraftRequest(UUID draftId) { + this.draftId = draftId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.quitDraft(draftId, getSessionId(ctx)); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitMatchRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitMatchRequest.java new file mode 100644 index 00000000000..8656adef867 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitMatchRequest.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public class QuitMatchRequest extends ServerRequest { + private final UUID gameId; + + public QuitMatchRequest(UUID gameId) { + this.gameId = gameId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.quitMatch(gameId, getSessionId(ctx)); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitTournamentRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitTournamentRequest.java new file mode 100644 index 00000000000..c47106d8a8a --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/QuitTournamentRequest.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public class QuitTournamentRequest extends ServerRequest { + private final UUID tournamentId; + + public QuitTournamentRequest(UUID tournamentId) { + this.tournamentId = tournamentId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.quitTournament(tournamentId, getSessionId(ctx)); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/RegisterClientRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/RegisterClientRequest.java index 04f36fa117e..22cd0fe79d2 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/RegisterClientRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/RegisterClientRequest.java @@ -26,13 +26,13 @@ public class RegisterClientRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { String host = ((InetSocketAddress)ctx.channel().remoteAddress()).getAddress().getHostAddress(); - boolean result = server.registerClient(connection, ctx.channel().id().asLongText(), version, host); + boolean result = server.registerClient(connection, getSessionId(ctx), version, host); if (result) { ctx.writeAndFlush(new ClientRegisteredResponse(server.getServerState())).addListener(WriteListener.getInstance()); } else { ctx.writeAndFlush(new ClientRegisteredResponse(new ServerState())).addListener(WriteListener.getInstance()); - server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.ValidationError); + server.disconnect(getSessionId(ctx), DisconnectReason.ValidationError); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/RemoveTableRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/RemoveTableRequest.java index 5a143cc6946..0bebf3b0671 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/RemoveTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/RemoveTableRequest.java @@ -20,7 +20,7 @@ public class RemoveTableRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.removeTable(ctx.channel().id().asLongText(), roomId, tableId); + server.removeTable(getSessionId(ctx), roomId, tableId); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendFeedbackRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendFeedbackRequest.java index c4aba23ad63..a467d3c2ae1 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendFeedbackRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendFeedbackRequest.java @@ -22,7 +22,7 @@ public class SendFeedbackRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendFeedbackMessage(ctx.channel().id().asLongText(), title, type, message, email); + server.sendFeedbackMessage(getSessionId(ctx), title, type, message, email); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerBooleanRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerBooleanRequest.java index 97b2ca5a788..8717940c9af 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerBooleanRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerBooleanRequest.java @@ -19,7 +19,7 @@ public class SendPlayerBooleanRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerBoolean(gameId, ctx.channel().id().asLongText(), b); + server.sendPlayerBoolean(gameId, getSessionId(ctx), b); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerIntegerRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerIntegerRequest.java index 69ae09b2a80..6c051a9e3b8 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerIntegerRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerIntegerRequest.java @@ -19,7 +19,7 @@ public class SendPlayerIntegerRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerInteger(gameId, ctx.channel().id().asLongText(), i); + server.sendPlayerInteger(gameId, getSessionId(ctx), i); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerManaTypeRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerManaTypeRequest.java index f4d577c7f08..250134f8a55 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerManaTypeRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerManaTypeRequest.java @@ -22,7 +22,7 @@ public class SendPlayerManaTypeRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerManaType(gameId, playerId, ctx.channel().id().asLongText(), manaType); + server.sendPlayerManaType(gameId, playerId, getSessionId(ctx), manaType); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerStringRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerStringRequest.java index c2daa52d643..a4101ef8697 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerStringRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerStringRequest.java @@ -19,7 +19,7 @@ public class SendPlayerStringRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerString(gameId, ctx.channel().id().asLongText(), string); + server.sendPlayerString(gameId, getSessionId(ctx), string); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerUUIDRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerUUIDRequest.java index a5cbd65a390..32f66afa1f6 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerUUIDRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SendPlayerUUIDRequest.java @@ -19,7 +19,7 @@ public class SendPlayerUUIDRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.sendPlayerUUID(gameId, ctx.channel().id().asLongText(), id); + server.sendPlayerUUID(gameId, getSessionId(ctx), id); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/ServerRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/ServerRequest.java index 31b649be996..26992dc1471 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/ServerRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/ServerRequest.java @@ -12,4 +12,8 @@ public abstract class ServerRequest implements Serializable { public abstract void handleMessage(MageServer server, ChannelHandlerContext ctx); + protected String getSessionId(ChannelHandlerContext ctx) { + return ctx.channel().id().asLongText(); + } + } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SetPreferencesRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SetPreferencesRequest.java index 68375be4ef4..7bab283a150 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SetPreferencesRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SetPreferencesRequest.java @@ -17,7 +17,7 @@ public class SetPreferencesRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.setPreferences(ctx.channel().id().asLongText(), view); + server.setPreferences(getSessionId(ctx), view); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/StartMatchRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/StartMatchRequest.java index 9953898ac9b..c2905e0b6c9 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/StartMatchRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/StartMatchRequest.java @@ -22,7 +22,7 @@ public class StartMatchRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new BooleanResponse(server.startMatch(ctx.channel().id().asLongText(), roomId, tableId))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new BooleanResponse(server.startMatch(getSessionId(ctx), roomId, tableId))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/StartTournamentRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/StartTournamentRequest.java new file mode 100644 index 00000000000..d219eb733a5 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/StartTournamentRequest.java @@ -0,0 +1,27 @@ +package org.mage.network.messages.requests; + +import io.netty.channel.ChannelHandlerContext; +import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; +import org.mage.network.messages.responses.BooleanResponse; + +/** + * + * @author BetaSteward + */ +public class StartTournamentRequest extends ServerRequest { + private final UUID roomId; + private final UUID tableId; + + public StartTournamentRequest(UUID roomId, UUID tableId) { + this.roomId = roomId; + this.tableId = tableId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new BooleanResponse(server.startTournament(getSessionId(ctx), roomId, tableId))).addListener(WriteListener.getInstance()); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SubmitDeckRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SubmitDeckRequest.java index 664cd8803da..ca23bc71e52 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SubmitDeckRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SubmitDeckRequest.java @@ -22,7 +22,7 @@ public class SubmitDeckRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - ctx.writeAndFlush(new BooleanResponse(server.submitDeck(ctx.channel().id().asLongText(), tableId, deckCardLists))).addListener(WriteListener.getInstance()); + ctx.writeAndFlush(new BooleanResponse(server.submitDeck(getSessionId(ctx), tableId, deckCardLists))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/SwapSeatRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/SwapSeatRequest.java index 6b16dc7ce8a..a9d33aa3fc8 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/SwapSeatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/SwapSeatRequest.java @@ -24,7 +24,7 @@ public class SwapSeatRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.swapSeats(ctx.channel().id().asLongText(), roomId, tableId, seatNum1, seatNum2); + server.swapSeats(getSessionId(ctx), roomId, tableId, seatNum1, seatNum2); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/requests/UpdateDeckRequest.java b/Mage.Network/src/main/java/org/mage/network/messages/requests/UpdateDeckRequest.java index a4277090082..17363a15b64 100644 --- a/Mage.Network/src/main/java/org/mage/network/messages/requests/UpdateDeckRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/messages/requests/UpdateDeckRequest.java @@ -20,7 +20,7 @@ public class UpdateDeckRequest extends ServerRequest { @Override public void handleMessage(MageServer server, ChannelHandlerContext ctx) { - server.updateDeck(ctx.channel().id().asLongText(), tableId, deckCardLists); + server.updateDeck(getSessionId(ctx), tableId, deckCardLists); } } diff --git a/Mage.Network/src/main/java/org/mage/network/messages/responses/GetTournamentResponse.java b/Mage.Network/src/main/java/org/mage/network/messages/responses/GetTournamentResponse.java new file mode 100644 index 00000000000..8362a6404d8 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/responses/GetTournamentResponse.java @@ -0,0 +1,23 @@ +package org.mage.network.messages.responses; + +import mage.view.TournamentView; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class GetTournamentResponse extends ClientMessage { + private final TournamentView tournament; + + public GetTournamentResponse(TournamentView tournament) { + this.tournament = tournament; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.receiveTournamentView(tournament); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/messages/responses/PickCardResponse.java b/Mage.Network/src/main/java/org/mage/network/messages/responses/PickCardResponse.java new file mode 100644 index 00000000000..cd137b12a95 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/messages/responses/PickCardResponse.java @@ -0,0 +1,24 @@ +package org.mage.network.messages.responses; + +import mage.view.DraftPickView; +import org.mage.network.handlers.client.ClientMessageHandler; +import org.mage.network.messages.ClientMessage; + +/** + * + * @author BetaSteward + */ +public class PickCardResponse extends ClientMessage { + + private DraftPickView view; + + public PickCardResponse(DraftPickView view) { + this.view = view; + } + + @Override + public void handleMessage(ClientMessageHandler handler) { + handler.receiveDraftPickView(view); + } + +} diff --git a/Mage.Server/src/main/java/mage/server/ServerMain.java b/Mage.Server/src/main/java/mage/server/ServerMain.java index 287a559f3af..f6cbf422ab3 100644 --- a/Mage.Server/src/main/java/mage/server/ServerMain.java +++ b/Mage.Server/src/main/java/mage/server/ServerMain.java @@ -45,13 +45,16 @@ import mage.choices.Choice; import mage.constants.ManaType; import mage.constants.PlayerAction; import mage.constants.TableState; +import mage.game.Table; import mage.game.match.MatchOptions; import mage.game.match.MatchType; +import mage.game.tournament.TournamentOptions; import mage.game.tournament.TournamentType; import mage.interfaces.ServerState; import mage.remote.Connection; import mage.remote.DisconnectReason; import mage.server.draft.CubeFactory; +import mage.server.draft.DraftManager; import mage.server.game.DeckValidatorFactory; import mage.server.game.GameFactory; import mage.server.game.GameManager; @@ -62,6 +65,7 @@ import mage.server.services.LogKeys; import mage.server.services.impl.FeedbackServiceImpl; import mage.server.services.impl.LogServiceImpl; import mage.server.tournament.TournamentFactory; +import mage.server.tournament.TournamentManager; import mage.server.util.ConfigSettings; import mage.server.util.PluginClassLoader; import mage.server.util.ServerMessagesUtil; @@ -249,43 +253,33 @@ public class ServerMain implements MageServer { LogServiceImpl.instance.log(LogKeys.KEY_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); return table; } -// -// @Override -// public TableView createTournamentTable(final String sessionId, final UUID roomId, final TournamentOptions options) throws MageException { -// return executeWithResult("createTournamentTable", sessionId, new ActionWithTableViewResult() { -// @Override -// public TableView execute() throws MageException { -// try { -// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); -// // check AI players max -// String maxAiOpponents = ConfigSettings.getInstance().getMaxAiOpponents(); -// if (maxAiOpponents != null) { -// int max = Integer.parseInt(maxAiOpponents); -// int aiPlayers = 0; -// for (String playerType : options.getPlayerTypes()) { -// if (!playerType.equals("Human")) { -// aiPlayers++; -// } -// } -// if (aiPlayers > max) { -// User user = UserManager.getInstance().getUser(userId); -// if (user != null) { -// user.showUserMessage("Create tournament", "It's only allowed to use a maximum of " + max + " AI players."); -// } -// throw new MageException("No message"); -// } -// } -// TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); -// logger.debug("Tournament table " + table.getTableId() + " created"); -// LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); -// return table; -// } catch (Exception ex) { -// handleException(ex); -// } -// return null; -// } -// }); -// } + + @Override + public TableView createTournamentTable(final String sessionId, final UUID roomId, final TournamentOptions options) { + UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); + // check AI players max + String maxAiOpponents = ConfigSettings.getInstance().getMaxAiOpponents(); + if (maxAiOpponents != null) { + int max = Integer.parseInt(maxAiOpponents); + int aiPlayers = 0; + for (String playerType : options.getPlayerTypes()) { + if (!playerType.equals("Human")) { + aiPlayers++; + } + } + if (aiPlayers > max) { + User user = UserManager.getInstance().getUser(userId); + if (user != null) { + user.showUserMessage("Create tournament", "It's only allowed to use a maximum of " + max + " AI players."); + } + return null; + } + } + TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); + logger.debug("Tournament table " + table.getTableId() + " created"); + LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); + return table; + } @Override public void removeTable(final String sessionId, final UUID roomId, final UUID tableId) { @@ -437,34 +431,22 @@ public class ServerMain implements MageServer { // } // }); // } -// -// @Override -// public boolean startTournament(final String sessionId, final UUID roomId, final UUID tableId) throws MageException { -// if (!TableManager.getInstance().getController(tableId).changeTableState(TableState.STARTING)) { -// return false; -// } -// execute("startTournament", sessionId, new Action() { -// @Override -// public void execute() { -// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); -// TableManager.getInstance().startTournament(userId, roomId, tableId); -// } -// }); -// return true; -// } -// -// @Override -// //FIXME: why no sessionId here??? -// public TournamentView getTournament(UUID tournamentId) throws MageException { -// try { -// return TournamentManager.getInstance().getTournamentView(tournamentId); -// } -// catch (Exception ex) { -// handleException(ex); -// } -// return null; -// } -// + + @Override + public boolean startTournament(final String sessionId, final UUID roomId, final UUID tableId) { + if (!TableManager.getInstance().getController(tableId).changeTableState(TableState.STARTING)) { + return false; + } + UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); + TableManager.getInstance().startTournament(userId, roomId, tableId); + return true; + } + + @Override + public TournamentView getTournament(UUID tournamentId) { + return TournamentManager.getInstance().getTournamentView(tournamentId); + } + // @Override // //FIXME: why no sessionId here??? // public void sendChatMessage(final UUID chatId, final String userName, final String message) throws MageException { @@ -573,28 +555,20 @@ public class ServerMain implements MageServer { return GameManager.getInstance().getChatId(gameId); } -// @Override -// public void joinDraft(final UUID draftId, final String sessionId) throws MageException { -// execute("joinDraft", sessionId, new Action() { -// @Override -// public void execute() { -// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); -// DraftManager.getInstance().joinDraft(draftId, userId); -// } -// }); -// } -// -// @Override -// public void joinTournament(final UUID tournamentId, final String sessionId) throws MageException { -// execute("joinTournament", sessionId, new Action() { -// @Override -// public void execute() { -// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); -// TournamentManager.getInstance().joinTournament(tournamentId, userId); -// } -// }); -// } -// + @Override + public boolean joinDraft(final UUID draftId, final String sessionId) { + UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); + DraftManager.getInstance().joinDraft(draftId, userId); + return true; + } + + @Override + public boolean joinTournament(final UUID tournamentId, final String sessionId) { + UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); + TournamentManager.getInstance().joinTournament(tournamentId, userId); + return true; + } + // @Override // //FIXME: why no sessionId here??? // public UUID getGameChatId(UUID gameId) throws MageException { @@ -606,19 +580,12 @@ public class ServerMain implements MageServer { // } // return null; // } -// -// @Override -// //FIXME: why no sessionId here??? -// public UUID getTournamentChatId(UUID tournamentId) throws MageException { -// try { -// return TournamentManager.getInstance().getChatId(tournamentId); -// } -// catch (Exception ex) { -// handleException(ex); -// } -// return null; -// } -// + + @Override + public UUID getTournamentChatId(UUID tournamentId) { + return TournamentManager.getInstance().getChatId(tournamentId); + } + @Override public void sendPlayerUUID(final UUID gameId, final String sessionId, final UUID data) { User user = SessionManager.getInstance().getUser(sessionId); @@ -669,87 +636,62 @@ public class ServerMain implements MageServer { logger.warn("Your session expired: gameId=" + gameId + ", sessionId=" + sessionId); } } -// -// @Override -// public DraftPickView sendCardPick(final UUID draftId, final String sessionId, final UUID cardPick, final Set hiddenCards) throws MageException { -// return executeWithResult("sendCardPick", sessionId, new ActionWithNullNegativeResult() { -// @Override -// public DraftPickView execute() { -// Session session = SessionManager.getInstance().getSession(sessionId); -// if (session != null) { -// return DraftManager.getInstance().sendCardPick(draftId, session.getUserId(), cardPick, hiddenCards); -// } else{ -// logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); -// } -// return null; -// } -// }); -// } -// -// @Override -// public void sendCardMark(final UUID draftId, final String sessionId, final UUID cardPick) throws MageException { -// execute("sendCardMark", sessionId, new Action() { -// @Override -// public void execute() { -// Session session = SessionManager.getInstance().getSession(sessionId); -// if (session != null) { -// DraftManager.getInstance().sendCardMark(draftId, session.getUserId(), cardPick); -// } else{ -// logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); -// } -// } -// }); -// } -// -// @Override -// public void quitMatch(final UUID gameId, final String sessionId) throws MageException { -// execute("quitMatch", sessionId, new Action() { -// @Override -// public void execute() { -// Session session = SessionManager.getInstance().getSession(sessionId); -// if (session != null) { -// GameManager.getInstance().quitMatch(gameId, session.getUserId()); -// } else{ -// logger.error("Session not found sessionId: "+ sessionId + " gameId:" +gameId); -// } -// } -// }); -// } -// -// @Override -// public void quitTournament(final UUID tournamentId, final String sessionId) throws MageException { -// execute("quitTournament", sessionId, new Action() { -// @Override -// public void execute() { -// Session session = SessionManager.getInstance().getSession(sessionId); -// if (session != null) { -// TournamentManager.getInstance().quit(tournamentId, session.getUserId()); -// }else{ -// logger.error("Session not found sessionId: "+ sessionId + " tournamentId:" + tournamentId); -// } -// } -// }); -// } -// -// @Override -// public void quitDraft(final UUID draftId, final String sessionId) throws MageException { -// execute("quitDraft", sessionId, new Action() { -// @Override -// public void execute() { -// Session session = SessionManager.getInstance().getSession(sessionId); -// if (session == null) { -// logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); -// return; -// } -// UUID tableId = DraftManager.getInstance().getControllerByDraftId(draftId).getTableId(); -// Table table = TableManager.getInstance().getTable(tableId); -// if (table.isTournament()) { -// UUID tournamentId = table.getTournament().getId(); -// TournamentManager.getInstance().quit(tournamentId, session.getUserId()); -// } -// } -// }); -// } + + @Override + public DraftPickView pickCard(final UUID draftId, final String sessionId, final UUID cardPick, final Set hiddenCards) { + Session session = SessionManager.getInstance().getSession(sessionId); + if (session != null) { + return DraftManager.getInstance().sendCardPick(draftId, session.getUserId(), cardPick, hiddenCards); + } else{ + logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); + } + return null; + } + + @Override + public void markCard(final UUID draftId, final String sessionId, final UUID cardPick) { + Session session = SessionManager.getInstance().getSession(sessionId); + if (session != null) { + DraftManager.getInstance().sendCardMark(draftId, session.getUserId(), cardPick); + } else{ + logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); + } + } + + @Override + public void quitMatch(final UUID gameId, final String sessionId) { + Session session = SessionManager.getInstance().getSession(sessionId); + if (session != null) { + GameManager.getInstance().quitMatch(gameId, session.getUserId()); + } else{ + logger.error("Session not found sessionId: "+ sessionId + " gameId:" +gameId); + } + } + + @Override + public void quitTournament(final UUID tournamentId, final String sessionId) { + Session session = SessionManager.getInstance().getSession(sessionId); + if (session != null) { + TournamentManager.getInstance().quit(tournamentId, session.getUserId()); + }else{ + logger.error("Session not found sessionId: "+ sessionId + " tournamentId:" + tournamentId); + } + } + + @Override + public void quitDraft(final UUID draftId, final String sessionId) { + Session session = SessionManager.getInstance().getSession(sessionId); + if (session == null) { + logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); + return; + } + UUID tableId = DraftManager.getInstance().getControllerByDraftId(draftId).getTableId(); + Table table = TableManager.getInstance().getTable(tableId); + if (table.isTournament()) { + UUID tournamentId = table.getTournament().getId(); + TournamentManager.getInstance().quit(tournamentId, session.getUserId()); + } + } @Override public void sendPlayerAction(final PlayerAction playerAction, final UUID gameId, final String sessionId, final Serializable data) { @@ -1278,10 +1220,6 @@ public class ServerMain implements MageServer { server.draftUpdate(sessionId, draftId, draftView); } - public void draftInform(String sessionId, UUID draftId, DraftView draftView, String message) { - server.draftInform(sessionId, draftId, draftView, message); - } - public void draftOver(String sessionId, UUID draftId) { server.draftOver(sessionId, draftId); } @@ -1298,25 +1236,25 @@ public class ServerMain implements MageServer { server.construct(sessionId, tableId, deck, time); } - public void startTournament(String sessionId, UUID tournamentId, UUID playerId) { - server.startTournament(sessionId, tournamentId, playerId); + public void tournamentStarted(String sessionId, UUID tournamentId, UUID playerId) { + server.tournamentStarted(sessionId, tournamentId, playerId); } public void showTournament(String sessionId, UUID tournamentId) { server.showTournament(sessionId, tournamentId); } - public void tournamentInit(String sessionId, UUID tournamentId, TournamentView tournamentView) { - server.tournamentInit(sessionId, tournamentId, tournamentView); - } +// public void tournamentInit(String sessionId, UUID tournamentId, TournamentView tournamentView) { +// server.tournamentInit(sessionId, tournamentId, tournamentView); +// } - public void tournamentUpdate(String sessionId, UUID tournamentId, TournamentView tournamentView) { - server.tournamentUpdate(sessionId, tournamentId, tournamentView); - } - - public void tournamentOver(String sessionId, UUID tournamentId) { - server.tournamentOver(sessionId, tournamentId); - } +// public void tournamentUpdate(String sessionId, UUID tournamentId, TournamentView tournamentView) { +// server.tournamentUpdate(sessionId, tournamentId, tournamentView); +// } +// +// public void tournamentOver(String sessionId, UUID tournamentId) { +// server.tournamentOver(sessionId, tournamentId); +// } public void showGameEndDialog(String sessionId, UUID gameId) { server.showGameEndDialog(sessionId, gameId); diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 67c24b4f024..e9ee1f87662 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -62,7 +62,6 @@ import mage.view.DraftView; import mage.view.GameClientMessage; import mage.view.GameEndView; import mage.view.GameView; -import mage.view.TournamentView; import mage.view.UserRequestMessage; import org.apache.log4j.Logger; import org.mage.network.messages.MessageType; @@ -288,25 +287,13 @@ public class User { } public void tournamentStarted(final UUID tournamentId, final UUID playerId) { - ServerMain.getInstance().startTournament(sessionId, tournamentId, playerId); + ServerMain.getInstance().tournamentStarted(sessionId, tournamentId, playerId); } public void showTournament(final UUID tournamentId) { ServerMain.getInstance().showTournament(sessionId, tournamentId); } - public void tournamentInit(UUID tournamentId, TournamentView tournamentView) { - ServerMain.getInstance().tournamentInit(sessionId, tournamentId, tournamentView); - } - - public void tournamentUpdate(UUID tournamentId, TournamentView tournamentView) { - ServerMain.getInstance().tournamentUpdate(sessionId, tournamentId, tournamentView); - } - - public void tournamentOver(UUID tournamentId, String message) { - ServerMain.getInstance().tournamentOver(sessionId, tournamentId); - } - public void showGameEndDialog(final UUID gameId) { ServerMain.getInstance().showGameEndDialog(sessionId, gameId); } @@ -323,10 +310,6 @@ public class User { ServerMain.getInstance().draftUpdate(sessionId, draftId, draftView); } - public void draftInform(UUID draftId, DraftView view, String message) { - ServerMain.getInstance().draftInform(sessionId, draftId, view, message); - } - public void draftOver(UUID draftId) { ServerMain.getInstance().draftOver(sessionId, 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 ff2c9a0810c..b8380fba0fd 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftSession.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftSession.java @@ -89,17 +89,6 @@ public class DraftSession { } } - // not used - // - public void inform(final String message) { - if (!killed) { - User user = UserManager.getInstance().getUser(userId); - if (user != null) { - user.draftInform(draft.getId(), getDraftView(), message); - } - } - } - public void draftOver() { if (!killed) { User user = UserManager.getInstance().getUser(userId); 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 e0ab0d303bd..c0111400c7c 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -184,11 +184,6 @@ public class TournamentController { logger.fatal("Tournament session not found - playerId:" + playerId + " tournamentId " + tournament.getId()); return; } - if (!tournamentSession.init()) { - logger.fatal("Unable to initialize client userId: " + tournamentSession.userId + " tournamentId " + tournament.getId()); - return; - } - tournamentSession.update(); } private void checkStart() { @@ -216,13 +211,6 @@ public class TournamentController { } private synchronized void startTournament() { - for (final TournamentSession tournamentSession : tournamentSessions.values()) { - if (!tournamentSession.init()) { - logger.fatal("Unable to initialize client userId: " + tournamentSession.userId + " tournamentId " + tournament.getId()); - //TODO: generate client error message - return; - } - } started = true; logger.debug("Tournament starts (all players joined): " + tournament.getId() + " - " + tournament.getTournamentType().toString()); tournament.nextStep(); 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 36cc0472fd1..c2cc1faacf2 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java @@ -28,6 +28,10 @@ package mage.server.tournament; +import java.util.UUID; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import mage.cards.decks.Deck; import mage.game.tournament.Tournament; import mage.server.User; @@ -36,11 +40,6 @@ import mage.server.util.ThreadExecutor; import mage.view.TournamentView; import org.apache.log4j.Logger; -import java.util.UUID; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - /** * * @author BetaSteward_at_googlemail.com @@ -64,35 +63,6 @@ public class TournamentSession { this.tableId = tableId; } - public boolean init() { - if (!killed) { - User user = UserManager.getInstance().getUser(userId); - if (user != null) { - user.tournamentInit(tournament.getId(), getTournamentView()); - return true; - } - } - return false; - } - - public void update() { - if (!killed) { - User user = UserManager.getInstance().getUser(userId); - if (user != null) { - user.tournamentUpdate(tournament.getId(), getTournamentView()); - } - } - } - - public void gameOver(final String message) { - if (!killed) { - User user = UserManager.getInstance().getUser(userId); - if (user != null) { - user.tournamentOver(tournament.getId(), message); - } - } - } - public void construct(int timeout) { if (!killed) { setupTimeout(timeout);