add more methods + refactored some packages

This commit is contained in:
betasteward 2015-06-25 21:32:05 -04:00
parent 95e9623186
commit 72a301d604
83 changed files with 693 additions and 268 deletions

View file

@ -27,59 +27,22 @@
*/
package mage.client;
import mage.cards.decks.Deck;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.cards.BigCard;
import mage.client.chat.ChatPanel;
import mage.client.components.MageComponents;
import mage.client.components.MageJDesktop;
import mage.client.components.MageRoundPane;
import mage.client.components.MageUI;
import mage.client.components.ext.dlg.DialogManager;
import mage.client.components.tray.MageTray;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.deckeditor.DeckEditorPane;
import mage.client.deckeditor.collection.viewer.CollectionViewerPane;
import mage.client.dialog.*;
import mage.client.draft.DraftPane;
import mage.client.draft.DraftPanel;
import mage.client.game.GamePane;
import mage.client.game.GamePanel;
import mage.client.plugins.impl.Plugins;
import mage.client.remote.CallbackClientImpl;
import mage.client.table.TablesPane;
import mage.client.tournament.TournamentPane;
import mage.client.util.EDTExceptionHandler;
import mage.client.util.SettingsManager;
import mage.client.util.SystemUtil;
import mage.client.util.audio.MusicPlayer;
import mage.client.util.gui.ArrowBuilder;
import mage.client.util.stats.UpdateMemUsageTask;
import mage.components.ImagePanel;
//import mage.interfaces.MageClient;
import mage.interfaces.callback.CallbackClient;
import mage.interfaces.callback.ClientCallback;
import mage.remote.Connection;
import mage.remote.Connection.ProxyType;
//import mage.remote.Session;
//import mage.remote.SessionImpl;
import mage.utils.MageVersion;
import mage.view.GameEndView;
import org.apache.log4j.Logger;
import org.mage.card.arcane.ManaSymbols;
import org.mage.plugins.card.constants.Constants;
import org.mage.plugins.card.images.DownloadPictures;
import org.mage.plugins.card.utils.impl.ImageManagerImpl;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.JToolBar.Separator;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.SplashScreen;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.beans.PropertyVetoException;
import java.io.IOException;
@ -91,28 +54,92 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.prefs.Preferences;
import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_FLAG;
import javax.imageio.ImageIO;
import javax.swing.AbstractButton;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
import javax.swing.JToolBar.Separator;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import mage.cards.decks.Deck;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.cards.repository.ExpansionInfo;
import mage.cards.repository.ExpansionRepository;
import mage.client.cards.BigCard;
import mage.client.chat.ChatPanel;
import mage.client.components.MageComponents;
import mage.client.components.MageJDesktop;
import mage.client.components.MageRoundPane;
import mage.client.components.MageUI;
import mage.client.components.ext.dlg.DialogManager;
import mage.client.components.tray.MageTray;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.deckeditor.DeckEditorPane;
import mage.client.deckeditor.collection.viewer.CollectionViewerPane;
import mage.client.dialog.AboutDialog;
import mage.client.dialog.ConnectDialog;
import mage.client.dialog.ErrorDialog;
import mage.client.dialog.FeedbackDialog;
import mage.client.dialog.GameEndDialog;
import mage.client.dialog.PreferencesDialog;
import mage.client.dialog.TableWaitingDialog;
import mage.client.dialog.UserRequestDialog;
import mage.client.draft.DraftPane;
import mage.client.draft.DraftPanel;
import mage.client.game.GamePane;
import mage.client.game.GamePanel;
import mage.client.plugins.impl.Plugins;
import mage.client.table.TablesPane;
import mage.client.tournament.TournamentPane;
import mage.client.util.EDTExceptionHandler;
import mage.client.util.GameManager;
import mage.client.util.audio.AudioManager;
import mage.game.Table;
import mage.client.util.SettingsManager;
import mage.client.util.SystemUtil;
import mage.client.util.audio.MusicPlayer;
import mage.client.util.gui.ArrowBuilder;
import mage.client.util.stats.UpdateMemUsageTask;
import mage.components.ImagePanel;
import mage.interfaces.ServerState;
import mage.remote.Connection;
import mage.remote.Connection.ProxyType;
import mage.utils.MageVersion;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.UserRequestMessage;
import net.java.truevfs.access.TArchiveDetector;
import net.java.truevfs.access.TConfig;
import net.java.truevfs.kernel.spec.FsAccessOption;
import org.apache.log4j.Logger;
import org.mage.card.arcane.ManaSymbols;
import org.mage.network.Client;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
import org.mage.plugins.card.constants.Constants;
import org.mage.plugins.card.images.DownloadPictures;
import org.mage.plugins.card.utils.impl.ImageManagerImpl;
/**
* @author BetaSteward_at_googlemail.com
@ -1581,6 +1608,43 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
public void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage) {
showUserRequestDialog(userRequestMessage);
}
@Override
public void gameUpdate(UUID gameId, GameView gameView) {
GamePanel panel = MageFrame.getGame(gameId);
if (panel != null) {
panel.updateGame(gameView);
}
}
@Override
public void gameInform(UUID gameId, GameClientMessage message) {
GamePanel panel = MageFrame.getGame(gameId);
if (panel != null) {
panel.inform(message.getMessage(), message.getGameView());
}
}
@Override
public void gameInformPersonal(UUID gameId, GameClientMessage message) {
GamePanel panel = MageFrame.getGame(gameId);
if (panel != null) {
JOptionPane.showMessageDialog(panel, message.getMessage(), "Game message", JOptionPane.INFORMATION_MESSAGE);
}
}
@Override
public void gameOver(UUID gameId, String message) {
GamePanel panel = MageFrame.getGame(gameId);
if (panel != null) {
panel.endMessage(message);
}
}
@Override
public void gameError(UUID gameId, String message) {
this.showErrorDialog("Game Error", message);
}
}

View file

@ -33,32 +33,19 @@ import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import mage.cards.decks.Deck;
import mage.client.MageFrame;
import mage.client.chat.ChatPanel;
import static mage.client.chat.ChatPanel.ChatType.TABLES;
import static mage.client.chat.ChatPanel.ChatType.TOURNAMENT;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.draft.DraftPanel;
import mage.client.game.GamePanel;
import mage.client.plugins.impl.Plugins;
import mage.client.util.DeckUtil;
import mage.client.util.GameManager;
import mage.client.util.audio.AudioManager;
import mage.client.util.object.SaveObjectUtil;
import mage.interfaces.callback.CallbackClient;
import mage.interfaces.callback.ClientCallback;
import mage.utils.CompressUtil;
import mage.view.AbilityPickerView;
import mage.view.ChatMessage;
import mage.view.ChatMessage.MessageType;
import static mage.view.ChatMessage.SoundToPlay.PlayerLeft;
import static mage.view.ChatMessage.SoundToPlay.PlayerQuitTournament;
import static mage.view.ChatMessage.SoundToPlay.PlayerSubmittedDeck;
import static mage.view.ChatMessage.SoundToPlay.PlayerWhispered;
import mage.view.DeckView;
import mage.view.DraftClientMessage;
import mage.view.DraftView;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.TableClientMessage;
import mage.view.UserRequestMessage;
@ -195,16 +182,16 @@ public class CallbackClientImpl implements CallbackClient {
// panel.init((GameView) callback.getData());
// } break;
// }
case "gameOver":
{
GamePanel panel = MageFrame.getGame(callback.getObjectId());
if (panel != null) {
panel.endMessage((String) callback.getData());
} break;
}
case "gameError":
frame.showErrorDialog("Game Error", (String) callback.getData());
break;
// case "gameOver":
// {
// GamePanel panel = MageFrame.getGame(callback.getObjectId());
// if (panel != null) {
// panel.endMessage((String) callback.getData());
// } break;
// }
// case "gameError":
// frame.showErrorDialog("Game Error", (String) callback.getData());
// break;
// case "gameAsk":
// {
// GameClientMessage message = (GameClientMessage) callback.getData();
@ -281,13 +268,13 @@ public class CallbackClientImpl implements CallbackClient {
// panel.getAmount(message.getMin(), message.getMax(), message.getMessage());
// } break;
// }
case "gameUpdate":
{
GamePanel panel = MageFrame.getGame(callback.getObjectId());
if (panel != null) {
panel.updateGame((GameView) callback.getData());
} break;
}
// case "gameUpdate":
// {
// GamePanel panel = MageFrame.getGame(callback.getObjectId());
// if (panel != null) {
// panel.updateGame((GameView) callback.getData());
// } break;
// }
// case "endGameInfo":
// MageFrame.getInstance().showGameEndDialog((GameEndView) callback.getData());
// break;
@ -296,31 +283,31 @@ public class CallbackClientImpl implements CallbackClient {
if (messageData.size() == 2) {
JOptionPane.showMessageDialog(null, messageData.get(1), messageData.get(0), JOptionPane.WARNING_MESSAGE);
} break;
case "gameInform":
if (callback.getMessageId() > gameInformMessageId) {
{
GameClientMessage message = (GameClientMessage) callback.getData();
GamePanel panel = MageFrame.getGame(callback.getObjectId());
if (panel != null) {
panel.inform(message.getMessage(), message.getGameView());
}
}
// no longer needed because phase skip handling on server side now
} else {
logger.warn(new StringBuilder("message out of sequence - ignoring").append("MessageId = ").append(callback.getMessageId()).append(" method = ").append(callback.getMethod()));
//logger.warn("message out of sequence - ignoring");
}
gameInformMessageId = messageId;
break;
case "gameInformPersonal":
{
GameClientMessage message = (GameClientMessage) callback.getData();
GamePanel panel = MageFrame.getGame(callback.getObjectId());
if (panel != null) {
JOptionPane.showMessageDialog(panel, message.getMessage(), "Game message",
JOptionPane.INFORMATION_MESSAGE);
} break;
}
// case "gameInform":
// if (callback.getMessageId() > gameInformMessageId) {
// {
// GameClientMessage message = (GameClientMessage) callback.getData();
// GamePanel panel = MageFrame.getGame(callback.getObjectId());
// if (panel != null) {
// panel.inform(message.getMessage(), message.getGameView());
// }
// }
//// no longer needed because phase skip handling on server side now
// } else {
// logger.warn(new StringBuilder("message out of sequence - ignoring").append("MessageId = ").append(callback.getMessageId()).append(" method = ").append(callback.getMethod()));
// //logger.warn("message out of sequence - ignoring");
// }
// gameInformMessageId = messageId;
// break;
// case "gameInformPersonal":
// {
// GameClientMessage message = (GameClientMessage) callback.getData();
// GamePanel panel = MageFrame.getGame(callback.getObjectId());
// if (panel != null) {
// JOptionPane.showMessageDialog(panel, message.getMessage(), "Game message",
// JOptionPane.INFORMATION_MESSAGE);
// } break;
// }
case "sideboard":
{
TableClientMessage message = (TableClientMessage) callback.getData();

View file

@ -17,17 +17,17 @@ import org.junit.Ignore;
import javax.swing.*;
import java.util.concurrent.CountDownLatch;
import mage.choices.Choice;
import mage.game.Table;
import mage.interfaces.ServerState;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.UserRequestMessage;
import org.mage.network.Client;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
* Test for emulating the connection from multi mage clients.
@ -203,6 +203,31 @@ public class MultiConnectTest {
public void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameUpdate(UUID gameId, GameView gameView) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInform(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInformPersonal(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameOver(UUID gameId, String message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameError(UUID gameId, String message) {
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

@ -39,7 +39,7 @@ import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.handlers.client.ClientRegisteredMessageHandler;
import org.mage.network.handlers.client.HeartbeatHandler;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*
@ -195,7 +195,12 @@ public class Client {
}
public boolean submitDeck(UUID tableId, DeckCardLists deckCardLists) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
try {
return clientMessageHandler.submitDeck(tableId, deckCardLists);
} catch (Exception ex) {
logger.error("Error submitting deck", ex);
}
return false;
}
public void updateDeck(UUID tableId, DeckCardLists deckCardLists) {

View file

@ -1,14 +1,5 @@
package org.mage.network;
import org.mage.network.model.UserRequestDialogMessage;
import org.mage.network.model.GameEndInfoMessage;
import org.mage.network.model.GameSelectAmountMessage;
import org.mage.network.model.GamePlayXManaMessage;
import org.mage.network.model.GamePlayManaMessage;
import org.mage.network.model.GameChooseChoiceMessage;
import org.mage.network.model.GameChoosePileMessage;
import org.mage.network.model.GameChooseAbilityMessage;
import org.mage.network.model.GameSelectMessage;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
@ -34,31 +25,44 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import mage.choices.Choice;
import mage.game.Table;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.UserRequestMessage;
import org.apache.log4j.Logger;
import org.mage.network.handlers.ExceptionHandler;
import org.mage.network.handlers.MessageHandler;
import org.mage.network.handlers.server.HeartbeatHandler;
import org.mage.network.handlers.PingMessageHandler;
import org.mage.network.handlers.WriteListener;
import org.mage.network.handlers.server.ConnectionHandler;
import org.mage.network.handlers.server.HeartbeatHandler;
import org.mage.network.handlers.server.ServerRequestHandler;
import org.mage.network.interfaces.MageServer;
import org.mage.network.model.ChatMessageMessage;
import org.mage.network.model.GameAskMessage;
import org.mage.network.model.GameInitMessage;
import org.mage.network.model.GameStartedMessage;
import org.mage.network.model.GameTargetMessage;
import org.mage.network.model.InformClientMessage;
import org.mage.network.model.JoinedTableMessage;
import org.mage.network.model.MessageType;
import org.mage.network.model.PingMessage;
import org.mage.network.messages.ChatMessageMessage;
import org.mage.network.messages.GameAskMessage;
import org.mage.network.messages.GameChooseAbilityMessage;
import org.mage.network.messages.GameChooseChoiceMessage;
import org.mage.network.messages.GameChoosePileMessage;
import org.mage.network.messages.GameEndInfoMessage;
import org.mage.network.messages.GameErrorMessage;
import org.mage.network.messages.GameInformMessage;
import org.mage.network.messages.GameInformPersonalMessage;
import org.mage.network.messages.GameInitMessage;
import org.mage.network.messages.GameOverMessage;
import org.mage.network.messages.GamePlayManaMessage;
import org.mage.network.messages.GamePlayXManaMessage;
import org.mage.network.messages.GameSelectAmountMessage;
import org.mage.network.messages.GameSelectMessage;
import org.mage.network.messages.GameStartedMessage;
import org.mage.network.messages.GameTargetMessage;
import org.mage.network.messages.GameUpdateMessage;
import org.mage.network.messages.InformClientMessage;
import org.mage.network.messages.JoinedTableMessage;
import org.mage.network.messages.MessageType;
import org.mage.network.messages.PingMessage;
import org.mage.network.messages.UserRequestDialogMessage;
/**
*
@ -260,5 +264,34 @@ public class Server {
ch.writeAndFlush(new UserRequestDialogMessage(gameId, userRequestMessage)).addListener(WriteListener.getInstance());
}
public void gameUpdate(String sessionId, UUID gameId, GameView view) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new GameUpdateMessage(gameId, view)).addListener(WriteListener.getInstance());
}
public void gameInform(String sessionId, UUID gameId, GameClientMessage message) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new GameInformMessage(gameId, message)).addListener(WriteListener.getInstance());
}
public void gameInformPersonal(String sessionId, UUID gameId, GameClientMessage message) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new GameInformPersonalMessage(gameId, message)).addListener(WriteListener.getInstance());
}
public void gameOver(String sessionId, UUID gameId, String message) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new GameOverMessage(gameId, message)).addListener(WriteListener.getInstance());
}
public void gameError(String sessionId, UUID gameId, String message) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new GameErrorMessage(gameId, message)).addListener(WriteListener.getInstance());
}
}

View file

@ -4,8 +4,8 @@ import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.apache.log4j.Logger;
import org.mage.network.model.PingMessage;
import org.mage.network.model.PongMessage;
import org.mage.network.messages.PingMessage;
import org.mage.network.messages.PongMessage;
/**
*

View file

@ -16,29 +16,30 @@ import mage.view.TableView;
import mage.view.UserDataView;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.ChatMessageRequest;
import org.mage.network.model.ChatRoomIdRequest;
import org.mage.network.model.ClientMessage;
import org.mage.network.model.CreateTableRequest;
import org.mage.network.model.GetRoomRequest;
import org.mage.network.model.JoinChatRequest;
import org.mage.network.model.JoinGameRequest;
import org.mage.network.model.JoinTableRequest;
import org.mage.network.model.LeaveChatRequest;
import org.mage.network.model.LeaveTableRequest;
import org.mage.network.model.PlayerActionRequest;
import org.mage.network.model.RemoveTableRequest;
import org.mage.network.model.SendFeedbackRequest;
import org.mage.network.model.SendPlayerBooleanRequest;
import org.mage.network.model.SendPlayerIntegerRequest;
import org.mage.network.model.SendPlayerManaTypeRequest;
import org.mage.network.model.SendPlayerStringRequest;
import org.mage.network.model.SendPlayerUUIDRequest;
import org.mage.network.model.ServerMessagesRequest;
import org.mage.network.model.SetPreferencesRequest;
import org.mage.network.model.StartMatchRequest;
import org.mage.network.model.SwapSeatRequest;
import org.mage.network.model.TableWaitingRequest;
import org.mage.network.messages.requests.ChatMessageRequest;
import org.mage.network.messages.requests.ChatRoomIdRequest;
import org.mage.network.messages.ClientMessage;
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.JoinGameRequest;
import org.mage.network.messages.requests.JoinTableRequest;
import org.mage.network.messages.requests.LeaveChatRequest;
import org.mage.network.messages.requests.LeaveTableRequest;
import org.mage.network.messages.requests.PlayerActionRequest;
import org.mage.network.messages.requests.RemoveTableRequest;
import org.mage.network.messages.requests.SendFeedbackRequest;
import org.mage.network.messages.requests.SendPlayerBooleanRequest;
import org.mage.network.messages.requests.SendPlayerIntegerRequest;
import org.mage.network.messages.requests.SendPlayerManaTypeRequest;
import org.mage.network.messages.requests.SendPlayerStringRequest;
import org.mage.network.messages.requests.SendPlayerUUIDRequest;
import org.mage.network.messages.requests.ServerMessagesRequest;
import org.mage.network.messages.requests.SetPreferencesRequest;
import org.mage.network.messages.requests.StartMatchRequest;
import org.mage.network.messages.requests.SubmitDeckRequest;
import org.mage.network.messages.requests.SwapSeatRequest;
import org.mage.network.messages.requests.TableWaitingRequest;
/**
*
@ -123,7 +124,13 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler<ClientMess
return uuidQueue.take();
}
public void sendFeedback(String title, String type, String message, String email) throws Exception {
public boolean submitDeck(UUID tableId, DeckCardLists deckCardLists) throws Exception {
booleanQueue.clear();
ctx.writeAndFlush(new SubmitDeckRequest(tableId, deckCardLists)).addListener(WriteListener.getInstance());
return booleanQueue.take();
}
public void sendFeedback(String title, String type, String message, String email) {
ctx.writeAndFlush(new SendFeedbackRequest(title, type, message, email)).addListener(WriteListener.getInstance());
}

View file

@ -10,8 +10,8 @@ import mage.interfaces.ServerState;
import mage.remote.Connection;
import mage.utils.MageVersion;
import org.apache.log4j.Logger;
import org.mage.network.model.ClientRegisteredMessage;
import org.mage.network.model.RegisterClientRequest;
import org.mage.network.messages.responses.ClientRegisteredMessage;
import org.mage.network.messages.requests.RegisterClientRequest;
/**
*
@ -24,7 +24,7 @@ public class ClientRegisteredMessageHandler extends SimpleChannelInboundHandler<
private final BlockingQueue<ServerState> queue = new LinkedBlockingQueue<>();
private Connection connection;
private MageVersion version;
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
ctx.writeAndFlush(new RegisterClientRequest(connection, version)).addListener(new ListenerImpl());

View file

@ -7,7 +7,7 @@ import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import org.apache.log4j.Logger;
import org.mage.network.handlers.WriteListener;
import org.mage.network.model.PingMessage;
import org.mage.network.messages.PingMessage;
/**
*

View file

@ -9,8 +9,8 @@ import mage.remote.DisconnectReason;
import org.apache.log4j.Logger;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.model.PingMessage;
import org.mage.network.model.PongMessage;
import org.mage.network.messages.PingMessage;
import org.mage.network.messages.PongMessage;
/**
*

View file

@ -5,7 +5,7 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import mage.remote.DisconnectReason;
import org.mage.network.interfaces.MageServer;
import org.mage.network.model.ServerRequest;
import org.mage.network.messages.requests.ServerRequest;
/**
*

View file

@ -5,15 +5,15 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import mage.choices.Choice;
import mage.game.Table;
import mage.interfaces.ServerState;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.UserRequestMessage;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*
@ -36,6 +36,11 @@ public interface MageClient {
void gameStarted(UUID gameId, UUID playerId);
void initGame(UUID gameId, GameView gameView);
void gameUpdate(UUID gameId, GameView gameView);
void gameInform(UUID gameId, GameClientMessage message);
void gameInformPersonal(UUID gameId, GameClientMessage message);
void gameOver(UUID gameId, String message);
void gameError(UUID gameId, String message);
void gameAsk(UUID gameId, GameView gameView, String question);
void gameTarget(UUID gameId, GameView gameView, String question, CardsView cardView, Set<UUID> targets, boolean required, Map<String, Serializable> options);

View file

@ -52,6 +52,7 @@ public interface MageServer {
void sendPlayerInteger(UUID gameId, String sessionId, Integer data);
void sendPlayerAction(PlayerAction playerAction, UUID gameId, String sessionId, Serializable data);
boolean submitDeck(String sessionId, UUID tableId, DeckCardLists deckList);
void pingTime(long milliSeconds, String sessionId);
}

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.ChatMessage;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.io.Serializable;
import org.mage.network.handlers.client.ClientMessageHandler;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameView;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.AbilityPickerView;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.choices.Choice;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.CardsView;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.game.Table;

View file

@ -0,0 +1,24 @@
package org.mage.network.messages;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;
/**
*
* @author BetaSteward
*/
public class GameErrorMessage extends ClientMessage {
private final UUID gameId;
private final String message;
public GameErrorMessage(UUID gameId, String message) {
this.gameId = gameId;
this.message = message;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.getClient().gameError(gameId, message);
}
}

View file

@ -0,0 +1,25 @@
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameClientMessage;
import org.mage.network.handlers.client.ClientMessageHandler;
/**
*
* @author BetaSteward
*/
public class GameInformMessage extends ClientMessage {
private final UUID gameId;
private final GameClientMessage message;
public GameInformMessage(UUID gameId, GameClientMessage message) {
this.gameId = gameId;
this.message = message;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.getClient().gameInform(gameId, message);
}
}

View file

@ -0,0 +1,25 @@
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameClientMessage;
import org.mage.network.handlers.client.ClientMessageHandler;
/**
*
* @author BetaSteward
*/
public class GameInformPersonalMessage extends ClientMessage {
private final UUID gameId;
private final GameClientMessage message;
public GameInformPersonalMessage(UUID gameId, GameClientMessage message) {
this.gameId = gameId;
this.message = message;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.getClient().gameInformPersonal(gameId, message);
}
}

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameView;

View file

@ -0,0 +1,24 @@
package org.mage.network.messages;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;
/**
*
* @author BetaSteward
*/
public class GameOverMessage extends ClientMessage {
private final UUID gameId;
private final String message;
public GameOverMessage(UUID gameId, String message) {
this.gameId = gameId;
this.message = message;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.getClient().gameOver(gameId, message);
}
}

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameView;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameView;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.io.Serializable;
import java.util.Map;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.io.Serializable;
import java.util.Map;

View file

@ -0,0 +1,25 @@
package org.mage.network.messages;
import java.util.UUID;
import mage.view.GameView;
import org.mage.network.handlers.client.ClientMessageHandler;
/**
*
* @author BetaSteward
*/
public class GameUpdateMessage extends ClientMessage {
private final UUID gameId;
private final GameView view;
public GameUpdateMessage(UUID gameId, GameView view) {
this.gameId = gameId;
this.view = view;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.getClient().gameUpdate(gameId, view);
}
}

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import org.mage.network.handlers.client.ClientMessageHandler;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;

View file

@ -1,6 +1,7 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages;
import java.util.UUID;
import mage.view.UserRequestMessage;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.ChatRoomIdMessage;
/**
*

View file

@ -1,10 +1,11 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;
import mage.game.match.MatchOptions;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.messages.responses.CreateTableMessage;
/**
*

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.RoomMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.JoinGameMessage;
/**
*

View file

@ -1,10 +1,11 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;
import mage.cards.decks.DeckCardLists;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.messages.responses.JoinTableMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.LeftTableMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.net.InetSocketAddress;
@ -8,6 +8,7 @@ import mage.remote.DisconnectReason;
import mage.utils.MageVersion;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.messages.responses.ClientRegisteredMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import org.mage.network.interfaces.MageServer;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,8 +1,9 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.messages.responses.ServerMessagesMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import mage.view.UserDataView;

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.StartMatchMessage;
/**
*

View file

@ -0,0 +1,28 @@
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;
import mage.cards.decks.DeckCardLists;
import org.mage.network.handlers.WriteListener;
import org.mage.network.interfaces.MageServer;
import org.mage.network.messages.responses.SubmitDeckMessage;
/**
*
* @author BetaSteward
*/
public class SubmitDeckRequest extends ServerRequest {
private final UUID tableId;
private final DeckCardLists deckCardLists;
public SubmitDeckRequest(UUID tableId, DeckCardLists deckCardLists) {
this.tableId = tableId;
this.deckCardLists = deckCardLists;
}
@Override
public void handleMessage(MageServer server, ChannelHandlerContext ctx) {
ctx.writeAndFlush(new SubmitDeckMessage(server.submitDeck(ctx.channel().id().asLongText(), tableId, deckCardLists))).addListener(WriteListener.getInstance());
}
}

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.requests;
import io.netty.channel.ChannelHandlerContext;
import java.util.UUID;

View file

@ -1,9 +1,10 @@
package org.mage.network.model;
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.TableWaitingMessage;
/**
*

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,4 +1,4 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import java.io.Serializable;
import mage.interfaces.ServerState;

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import mage.view.TableView;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import java.util.UUID;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,6 +1,7 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import mage.view.RoomView;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import java.util.List;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -1,6 +1,7 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -0,0 +1,23 @@
package org.mage.network.messages.responses;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*
* @author BetaSteward
*/
public class SubmitDeckMessage extends ClientMessage {
private boolean success;
public SubmitDeckMessage(boolean success) {
this.success = success;
}
@Override
public void handleMessage(ClientMessageHandler handler) {
handler.receiveBoolean(success);
}
}

View file

@ -1,7 +1,8 @@
package org.mage.network.model;
package org.mage.network.messages.responses;
import mage.view.TableView;
import org.mage.network.handlers.client.ClientMessageHandler;
import org.mage.network.messages.ClientMessage;
/**
*

View file

@ -42,7 +42,6 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.prefs.Preferences;
import javax.swing.Box;
import javax.swing.JOptionPane;
@ -59,13 +58,14 @@ import mage.utils.MageVersion;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.UserRequestMessage;
import org.apache.log4j.Logger;
import org.mage.network.Client;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*
@ -435,4 +435,29 @@ public class ConsoleFrame extends javax.swing.JFrame implements MageClient {
public void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameUpdate(UUID gameId, GameView gameView) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInform(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInformPersonal(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameOver(UUID gameId, String message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameError(UUID gameId, String message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

View file

@ -15,6 +15,7 @@ import mage.utils.MageVersion;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.RoomView;
@ -23,7 +24,7 @@ import mage.view.UserDataView;
import mage.view.UserRequestMessage;
import org.mage.network.Client;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*
@ -181,4 +182,29 @@ public class TestClient implements MageClient {
public boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deck, String password) {
return client.joinTable(roomId, tableId, playerName, playerType, skill, deck, password);
}
@Override
public void gameUpdate(UUID gameId, GameView gameView) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInform(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameInformPersonal(UUID gameId, GameClientMessage message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameOver(UUID gameId, String message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void gameError(UUID gameId, String message) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

View file

@ -73,6 +73,7 @@ import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage;
import mage.view.ChatMessage.MessageColor;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.RoomView;
@ -83,7 +84,7 @@ import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.log4j.Logger;
import org.mage.network.Server;
import org.mage.network.interfaces.MageServer;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*
@ -321,20 +322,16 @@ public class ServerMain implements MageServer {
// }
// });
// }
//
// @Override
// public boolean submitDeck(final String sessionId, final UUID tableId, final DeckCardLists deckList) throws MageException, GameException {
// return executeWithResult("submitDeck", sessionId, new ActionWithBooleanResult() {
// @Override
// public Boolean execute() throws MageException {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList);
// logger.debug("Session " + sessionId + " submitted deck");
// return ret;
// }
// });
// }
//
@Override
public boolean submitDeck(final String sessionId, final UUID tableId, final DeckCardLists deckList) {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList);
if (ret)
logger.debug("Session " + sessionId + " submitted deck");
return ret;
}
// @Override
// public void updateDeck(final String sessionId, final UUID tableId, final DeckCardLists deckList) throws MageException, GameException {
// execute("updateDeck", sessionId, new Action() {
@ -1255,4 +1252,24 @@ public class ServerMain implements MageServer {
server.userRequestDialog(sessionId, gameId, userRequestMessage);
}
public void gameUpdate(String sessionId, UUID gameId, GameView view) {
server.gameUpdate(sessionId, gameId, view);
}
public void gameInform(String sessionId, UUID gameId, GameClientMessage message) {
server.gameInform(sessionId, gameId, message);
}
public void gameInformPersonal(String sessionId, UUID gameId, GameClientMessage message) {
server.gameInformPersonal(sessionId, gameId, message);
}
public void gameOver(String sessionId, UUID gameId, String message) {
server.gameOver(sessionId, gameId, message);
}
public void gameError(String sessionId, UUID gameId, String message) {
server.gameError(sessionId, gameId, message);
}
}

View file

@ -36,7 +36,7 @@ import mage.server.services.LogKeys;
import mage.server.services.impl.LogServiceImpl;
import mage.view.UserDataView;
import org.apache.log4j.Logger;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
*

View file

@ -38,7 +38,6 @@ import java.util.concurrent.TimeUnit;
import mage.MageException;
import mage.cards.decks.Deck;
import mage.cards.decks.DeckCardLists;
import mage.cards.decks.InvalidDeckException;
import mage.constants.RangeOfInfluence;
import mage.constants.TableState;
import mage.game.Game;
@ -346,7 +345,7 @@ public class TableController {
}
}
public synchronized boolean submitDeck(UUID userId, DeckCardLists deckList) throws MageException {
public synchronized boolean submitDeck(UUID userId, DeckCardLists deckList) {
UUID playerId = userPlayerMap.get(userId);
if (table.isTournament()) {
TournamentPlayer player = tournament.getPlayer(playerId);
@ -370,7 +369,16 @@ public class TableController {
if (table.getState() != TableState.SIDEBOARDING && table.getState() != TableState.CONSTRUCTING) {
return false;
}
Deck deck = Deck.load(deckList, false, false);
User user = UserManager.getInstance().getUser(userId);
Deck deck;
try {
deck = Deck.load(deckList, false, false);
}
catch (GameException ex) {
logger.error("Error loading deck", ex);
user.showUserError("Submit deck", "Error loading deck");
return false;
}
if (table.getState() == TableState.SIDEBOARDING && table.getMatch() != null) {
MatchPlayer mPlayer = table.getMatch().getPlayer(playerId);
if (mPlayer != null) {
@ -378,7 +386,8 @@ public class TableController {
}
}
if (!ServerMain.getInstance().isTestMode() && !table.getValidator().validate(deck)) {
throw new InvalidDeckException("Invalid deck for this format", table.getValidator().getInvalid());
user.showUserError("Submit deck", table.getValidator().getInvalidMessage());
return false;
}
submitDeck(userId, playerId, deck);
return true;

View file

@ -33,7 +33,6 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@ -154,7 +153,7 @@ public class TableManager {
return false;
}
public boolean submitDeck(UUID userId, UUID tableId, DeckCardLists deckList) throws MageException {
public boolean submitDeck(UUID userId, UUID tableId, DeckCardLists deckList) {
if (controllers.containsKey(tableId)) {
return controllers.get(tableId).submitDeck(userId, deckList);
}

View file

@ -28,11 +28,9 @@
package mage.server;
import java.io.Serializable;
import mage.remote.DisconnectReason;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@ -47,6 +45,7 @@ import mage.game.Table;
import mage.game.tournament.TournamentPlayer;
import mage.interfaces.callback.ClientCallback;
import mage.players.net.UserData;
import mage.remote.DisconnectReason;
import mage.server.draft.DraftSession;
import mage.server.game.GameManager;
import mage.server.game.GameSessionPlayer;
@ -56,12 +55,13 @@ import mage.server.tournament.TournamentSession;
import mage.server.util.SystemUtil;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
import mage.view.TableClientMessage;
import mage.view.UserRequestMessage;
import org.apache.log4j.Logger;
import org.mage.network.model.MessageType;
import org.mage.network.messages.MessageType;
/**
@ -254,6 +254,26 @@ public class User {
ServerMain.getInstance().userRequestDialog(sessionId, gameId, userRequestMessage);
}
public void gameUpdate(UUID gameId, GameView view) {
ServerMain.getInstance().gameUpdate(sessionId, gameId, view);
}
public void gameInform(UUID gameId, GameClientMessage message) {
ServerMain.getInstance().gameInform(sessionId, gameId, message);
}
public void gameInformPersonal(UUID gameId, GameClientMessage message) {
ServerMain.getInstance().gameInformPersonal(sessionId, gameId, message);
}
public void gameOver(UUID gameId, String message) {
ServerMain.getInstance().gameOver(sessionId, gameId, message);
}
public void gameError(UUID gameId, String message) {
ServerMain.getInstance().gameError(sessionId, gameId, message);
}
public void ccDraftStarted(final UUID draftId, final UUID playerId) {
fireCallback(new ClientCallback("startDraft", draftId, new TableClientMessage(draftId, playerId)));
}
@ -280,13 +300,13 @@ public class User {
}
public void showUserMessage(final String title, String message) {
// List<String> messageData = new LinkedList<>();
// messageData.add(titel);
// messageData.add(message);
// fireCallback(new ClientCallback("showUserMessage", null, messageData ));
ServerMain.getInstance().informClient(sessionId, title, message, MessageType.INFORMATION);
}
public void showUserError(final String title, String message) {
ServerMain.getInstance().informClient(sessionId, title, message, MessageType.ERROR);
}
public boolean ccWatchGame(final UUID gameId) {
fireCallback(new ClientCallback("watchGame", gameId));
return true;

View file

@ -33,7 +33,6 @@ import java.util.Map;
import java.util.UUID;
import mage.game.Game;
import mage.game.Table;
import mage.interfaces.callback.ClientCallback;
import mage.players.Player;
import mage.server.User;
import mage.server.UserManager;
@ -78,7 +77,7 @@ public class GameSessionWatcher {
if (!killed) {
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
user.fireCallback(new ClientCallback("gameUpdate", game.getId(), getGameView()));
user.gameUpdate(game.getId(), getGameView());
}
}
}
@ -87,7 +86,7 @@ public class GameSessionWatcher {
if (!killed) {
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
user.fireCallback(new ClientCallback("gameInform", game.getId(), new GameClientMessage(getGameView(), message)));
user.gameInform(game.getId(), new GameClientMessage(getGameView(), message));
}
}
}
@ -96,7 +95,7 @@ public class GameSessionWatcher {
if (!killed) {
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
user.fireCallback(new ClientCallback("gameInformPersonal", game.getId(), new GameClientMessage(getGameView(), message)));
user.gameInformPersonal(game.getId(), new GameClientMessage(getGameView(), message));
}
}
}
@ -106,7 +105,7 @@ public class GameSessionWatcher {
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
user.removeGameWatchInfo(game.getId());
user.fireCallback(new ClientCallback("gameOver", game.getId(), message));
user.gameOver(game.getId(), message);
}
}
}
@ -123,7 +122,7 @@ public class GameSessionWatcher {
if (!killed) {
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
user.fireCallback(new ClientCallback("gameError", game.getId(), message));
user.gameError(game.getId(), message);
}
}
}

View file

@ -67,4 +67,14 @@ public abstract class DeckValidator implements Serializable {
}
}
}
public String getInvalidMessage() {
StringBuilder sb = new StringBuilder();
sb.append("Invalid deck for this format").append("\n");
for (Map.Entry<String, String> entry: invalid.entrySet()) {
sb.append(entry.getKey()).append(" ").append(entry.getValue()).append("\n");
}
return sb.toString();
}
}