added draft and tournament methods + some refactoring

This commit is contained in:
betasteward 2015-07-05 08:57:14 -04:00
parent 1ff7f4ba5c
commit 8225a4080c
58 changed files with 1038 additions and 380 deletions

View file

@ -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 {

View file

@ -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());
}
}
}

View file

@ -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 {

View file

@ -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<UUID> cardsHidden) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
public DraftPickView pickCard(UUID draftId, UUID cardId, Set<UUID> 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) {

View file

@ -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.
}

View file

@ -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<ClientMess
private final BlockingQueue<UUID> uuidQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<RoomView> roomViewQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<TableView> tableViewQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<TournamentView> tournamentViewQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<DraftPickView> draftPickViewQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<List<String>> stringListQueue = new LinkedBlockingQueue<>();
public ClientMessageHandler (MageClient client) {
@ -114,6 +131,18 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler<ClientMess
return booleanQueue.take();
}
public boolean joinDraft(UUID draftId) throws Exception {
booleanQueue.clear();
ctx.writeAndFlush(new JoinDraftRequest(draftId)).addListener(WriteListener.getInstance());
return booleanQueue.take();
}
public DraftPickView pickCard(UUID draftId, UUID cardId, Set<UUID> 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<ClientMess
ctx.writeAndFlush(new UpdateDeckRequest(tableId, deckCardLists)).addListener(WriteListener.getInstance());
}
public void markCard(UUID draftId, UUID cardId) {
ctx.writeAndFlush(new MarkCardRequest(draftId, cardId)).addListener(WriteListener.getInstance());
}
public void quitDraft(UUID draftId) {
ctx.writeAndFlush(new QuitDraftRequest(draftId)).addListener(WriteListener.getInstance());
}
public void sendFeedback(String title, String type, String message, String email) {
ctx.writeAndFlush(new SendFeedbackRequest(title, type, message, email)).addListener(WriteListener.getInstance());
}
@ -186,6 +223,14 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler<ClientMess
tableViewQueue.offer(view);
}
public void receiveTournamentView(TournamentView view) {
tournamentViewQueue.offer(view);
}
public void receiveDraftPickView(DraftPickView view) {
draftPickViewQueue.offer(view);
}
public void receiveStringList(List<String> list) {
stringListQueue.offer(list);
}
@ -218,4 +263,42 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler<ClientMess
ctx.writeAndFlush(new SetPreferencesRequest(view)).addListener(WriteListener.getInstance());
}
public TableView createTournamentTable(UUID roomId, TournamentOptions options) throws Exception {
tableViewQueue.clear();
ctx.writeAndFlush(new CreateTournamentRequest(roomId, options)).addListener(WriteListener.getInstance());
return tableViewQueue.take();
}
public boolean startTournament(UUID roomId, UUID tableId) throws Exception {
booleanQueue.clear();
ctx.writeAndFlush(new StartTournamentRequest(roomId, tableId)).addListener(WriteListener.getInstance());
return booleanQueue.take();
}
public boolean joinTournament(UUID tournamentId) throws Exception {
booleanQueue.clear();
ctx.writeAndFlush(new JoinTournamentRequest(tournamentId)).addListener(WriteListener.getInstance());
return booleanQueue.take();
}
public void quitTournament(UUID tournamentId) {
ctx.writeAndFlush(new QuitTournamentRequest(tournamentId)).addListener(WriteListener.getInstance());
}
public UUID getTournamentChatId(UUID tournamentId) throws Exception {
uuidQueue.clear();
ctx.writeAndFlush(new GetTournamentChatIdRequest(tournamentId)).addListener(WriteListener.getInstance());
return uuidQueue.take();
}
public void quitMatch(UUID gameId) {
ctx.writeAndFlush(new QuitMatchRequest(gameId)).addListener(WriteListener.getInstance());
}
public TournamentView getTournament(UUID tournamentId) throws Exception {
tournamentViewQueue.clear();
ctx.writeAndFlush(new GetTournamentRequest(tournamentId)).addListener(WriteListener.getInstance());
return tournamentViewQueue.take();
}
}

View file

@ -42,7 +42,7 @@ public class HeartbeatHandler extends ChannelHandlerAdapter {
if (evt instanceof IdleStateEvent) {
IdleStateEvent e = (IdleStateEvent) evt;
if (e.state() == IdleState.READER_IDLE) {
server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.LostConnection);
server.disconnect(getSessionId(ctx), DisconnectReason.LostConnection);
ctx.disconnect();
logger.info("Disconnected due to extended idle");
} else if (e.state() == IdleState.WRITER_IDLE) {
@ -57,7 +57,7 @@ public class HeartbeatHandler extends ChannelHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof PongMessage) {
long milliSeconds = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
server.pingTime(milliSeconds, ctx.channel().id().asLongText());
server.pingTime(milliSeconds, getSessionId(ctx));
}
ctx.fireChannelRead(msg);
}
@ -66,4 +66,9 @@ public class HeartbeatHandler extends ChannelHandlerAdapter {
startTime = System.nanoTime();
ctx.writeAndFlush(ping).addListener(WriteListener.getInstance());
}
private String getSessionId(ChannelHandlerContext ctx) {
return ctx.channel().id().asLongText();
}
}

View file

@ -27,7 +27,11 @@ public class ServerRequestHandler extends SimpleChannelInboundHandler<ServerRequ
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.Disconnected);
server.disconnect(getSessionId(ctx), DisconnectReason.Disconnected);
}
private String getSessionId(ChannelHandlerContext ctx) {
return ctx.channel().id().asLongText();
}
}

View file

@ -10,6 +10,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;
@ -53,11 +55,20 @@ public interface MageClient {
void gameSelectAmount(UUID gameId, String message, int min, int max);
void gameSelect(UUID gameId, GameView gameView, String message, Map<String, Serializable> 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);
}

View file

@ -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<UUID> 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);

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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));
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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));
}

View file

@ -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());
}
}

View file

@ -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);
}
}

View file

@ -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<UUID> cardsHidden = new HashSet<>();
public PickCardRequest(UUID draftId, UUID cardId, Set<UUID> 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());
}
}

View file

@ -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);
}
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -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);
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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());
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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<UUID> hiddenCards) throws MageException {
// return executeWithResult("sendCardPick", sessionId, new ActionWithNullNegativeResult<DraftPickView>() {
// @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<UUID> 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);

View file

@ -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);
}

View file

@ -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);

View file

@ -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();

View file

@ -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);