diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 365358c9c1a..553b999fd6c 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -1002,20 +1002,25 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { this.tablesPane.hideTables(); } - public void showGames(boolean setActive) { - MagePane topPanebefore = getTopMost(tablesPane); - if (!tablesPane.isVisible()) { - this.tablesPane.setVisible(true); - this.tablesPane.showTables(); - } - if (setActive) { - setActive(tablesPane); - } else { - // if other panel was already shown, mamke sure it's topmost again - if (topPanebefore != null) { - setActive(topPanebefore); + public void showGames(final boolean setActive) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + MagePane topPanebefore = getTopMost(tablesPane); + if (!tablesPane.isVisible()) { + tablesPane.setVisible(true); + tablesPane.showTables(); + } + if (setActive) { + setActive(tablesPane); + } else { + // if other panel was already shown, mamke sure it's topmost again + if (topPanebefore != null) { + setActive(topPanebefore); + } + } } - } + }); } public void hideGames() { @@ -1372,13 +1377,13 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { @Override public void clientRegistered(ServerState state) { this.serverState = state; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - setWindowTitle(); - showGames(false); - } - }); +// SwingUtilities.invokeLater(new Runnable() { +// @Override +// public void run() { +// setWindowTitle(); +// showGames(false); +// } +// }); } @Override diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 1c738cc50bf..55196bb3628 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -366,7 +366,7 @@ public class ConnectDialog extends MageDialog { if (result) { lblStatus.setText(""); connected(); -// MageFrame.getInstance().showGames(false); + MageFrame.getInstance().showGames(false); } else { lblStatus.setText("Could not connect"); } diff --git a/Mage.Network/src/main/java/org/mage/network/Client.java b/Mage.Network/src/main/java/org/mage/network/Client.java index a530261d676..889dbbac27d 100644 --- a/Mage.Network/src/main/java/org/mage/network/Client.java +++ b/Mage.Network/src/main/java/org/mage/network/Client.java @@ -15,7 +15,6 @@ import java.util.Collection; import java.util.List; import java.util.Set; import java.util.UUID; -import java.util.logging.Level; import mage.cards.decks.DeckCardLists; import mage.constants.ManaType; import mage.constants.PlayerAction; @@ -37,13 +36,10 @@ import org.mage.network.handlers.client.ChatMessageHandler; import org.mage.network.handlers.client.ChatRoomHandler; import org.mage.network.handlers.client.ClientRegisteredMessageHandler; import org.mage.network.handlers.client.InformClientMessageHandler; -import org.mage.network.handlers.client.MessageHandler; +import org.mage.network.handlers.client.ServerMessageHandler; import org.mage.network.interfaces.MageClient; -import org.mage.network.model.JoinChatMessage; -import org.mage.network.model.LeaveChatMessage; import org.mage.network.model.MessageType; import org.mage.network.model.RegisterClientMessage; -import org.mage.network.model.SendChatMessage; /** * @@ -62,6 +58,7 @@ public class Client { private final ChatMessageHandler chatMessageHandler; private final InformClientMessageHandler informClientMessageHandler; private final ClientRegisteredMessageHandler clientRegisteredMessageHandler; + private final ServerMessageHandler serverMessageHandler; private Channel channel; private EventLoopGroup group; @@ -74,6 +71,7 @@ public class Client { chatMessageHandler = new ChatMessageHandler(client); informClientMessageHandler = new InformClientMessageHandler(client); clientRegisteredMessageHandler = new ClientRegisteredMessageHandler(client); + serverMessageHandler = new ServerMessageHandler(); } public boolean connect(String userName, String host, int port, MageVersion version) { @@ -87,8 +85,10 @@ public class Client { .channel(NioSocketChannel.class) .handler(new ClientInitializer()); + clientRegisteredMessageHandler.setUserName(userName); + clientRegisteredMessageHandler.setVersion(version); channel = b.connect(host, port).sync().channel(); - channel.writeAndFlush(new RegisterClientMessage(userName, version)); + clientRegisteredMessageHandler.registerClient(); client.connected(userName + "@" + host + ":" + port + " "); return true; } catch (InterruptedException ex) { @@ -116,6 +116,7 @@ public class Client { ch.pipeline().addLast("informClientMessageHandler", informClientMessageHandler); ch.pipeline().addLast("clientRegisteredMessageHandler", clientRegisteredMessageHandler); ch.pipeline().addLast("chatRoomHandler", chatRoomHandler); + ch.pipeline().addLast("serverMessageHandler", serverMessageHandler); } } @@ -279,7 +280,12 @@ public class Client { } public List getServerMessages() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return serverMessageHandler.getServerMessages(); + } catch (Exception ex) { + logger.error("Error getting server messages", ex); + } + return null; } public Collection getTables(UUID roomId) { diff --git a/Mage.Network/src/main/java/org/mage/network/Server.java b/Mage.Network/src/main/java/org/mage/network/Server.java index ca481cb3630..c667d9077f9 100644 --- a/Mage.Network/src/main/java/org/mage/network/Server.java +++ b/Mage.Network/src/main/java/org/mage/network/Server.java @@ -29,6 +29,7 @@ import org.mage.network.handlers.server.ConnectionHandler; import org.mage.network.handlers.server.JoinChatMessageHandler; import org.mage.network.handlers.server.LeaveChatMessageHandler; import org.mage.network.handlers.server.RegisterClientMessageHandler; +import org.mage.network.handlers.server.ServerMessageHandler; import org.mage.network.interfaces.MageServer; import org.mage.network.model.InformClientMessage; import org.mage.network.model.MessageType; @@ -56,6 +57,7 @@ public class Server { private final ChatMessageHandler chatMessageHandler; private final JoinChatMessageHandler joinChatMessageHandler; private final LeaveChatMessageHandler leaveChatMessageHandler; + private final ServerMessageHandler serverMessageHandler; public Server(MageServer server) { registerClientMessageHandler = new RegisterClientMessageHandler(server); @@ -63,6 +65,7 @@ public class Server { joinChatMessageHandler = new JoinChatMessageHandler(server); leaveChatMessageHandler = new LeaveChatMessageHandler(server); chatRoomIdHandler = new ChatRoomIdHandler(server); + serverMessageHandler = new ServerMessageHandler(server); } public void start(int port) { @@ -105,6 +108,7 @@ public class Server { ch.pipeline().addLast(handlersExecutor, chatMessageHandler); ch.pipeline().addLast(handlersExecutor, joinChatMessageHandler); ch.pipeline().addLast(handlersExecutor, leaveChatMessageHandler); + ch.pipeline().addLast(handlersExecutor, serverMessageHandler); } } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientRegisteredMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientRegisteredMessageHandler.java index c0ce45acfd7..dcb4b287bd8 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientRegisteredMessageHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientRegisteredMessageHandler.java @@ -2,8 +2,14 @@ package org.mage.network.handlers.client; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; +import java.util.UUID; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import mage.interfaces.ServerState; +import mage.utils.MageVersion; import org.mage.network.interfaces.MageClient; import org.mage.network.model.ClientRegisteredMessage; +import org.mage.network.model.RegisterClientMessage; /** * @@ -11,15 +17,38 @@ import org.mage.network.model.ClientRegisteredMessage; */ public class ClientRegisteredMessageHandler extends SimpleChannelInboundHandler { - private final MageClient client; - + private final MageClient client; +// private ChannelHandlerContext ctx; + private final BlockingQueue queue = new LinkedBlockingQueue<>(); + private String userName; + private MageVersion version; + public ClientRegisteredMessageHandler (MageClient client) { this.client = client; } + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { +// this.ctx = ctx; + ctx.writeAndFlush(new RegisterClientMessage(userName, version)); + super.channelActive(ctx); + } + @Override protected void messageReceived(ChannelHandlerContext ctx, ClientRegisteredMessage msg) throws Exception { - client.clientRegistered(msg.getServerState()); + queue.offer(msg.getServerState()); + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public void setVersion(MageVersion version) { + this.version = version; + } + + public void registerClient() throws InterruptedException { + client.clientRegistered(queue.take()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ServerMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ServerMessageHandler.java new file mode 100644 index 00000000000..910c9a8b4b4 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ServerMessageHandler.java @@ -0,0 +1,37 @@ +package org.mage.network.handlers.client; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import org.mage.network.model.ServerMessagesMessage; +import org.mage.network.model.ServerMessagesRequest; + + +/** + * + * @author BetaSteward + */ +public class ServerMessageHandler extends SimpleChannelInboundHandler { + + private ChannelHandlerContext ctx; + private final BlockingQueue> queue = new LinkedBlockingQueue<>(); + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + this.ctx = ctx; + super.channelActive(ctx); + } + + @Override + protected void messageReceived(ChannelHandlerContext ctx, ServerMessagesMessage msg) throws Exception { + queue.offer(msg.getMessages()); + } + + public List getServerMessages() throws Exception { + ctx.writeAndFlush(new ServerMessagesRequest()); + return queue.take(); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java new file mode 100644 index 00000000000..df73013ed40 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java @@ -0,0 +1,39 @@ +package org.mage.network.handlers.server; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import org.mage.network.interfaces.MageServer; +import org.mage.network.model.ServerMessagesMessage; +import org.mage.network.model.ServerMessagesRequest; + +/** + * + * @author BetaSteward + */ +@Sharable +public class ServerMessageHandler extends SimpleChannelInboundHandler { + + private final MageServer server; + + public ServerMessageHandler (MageServer server) { + this.server = server; + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, ServerMessagesRequest msg) { + ctx.writeAndFlush(new ServerMessagesMessage(server.getServerMessages())); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.flush(); + } + + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } +} diff --git a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java index 3029cf4e7c3..a9b79b8627d 100644 --- a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java +++ b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java @@ -1,5 +1,6 @@ package org.mage.network.interfaces; +import java.util.List; import java.util.UUID; import mage.interfaces.ServerState; import mage.utils.MageVersion; @@ -19,5 +20,7 @@ public interface MageServer { void receiveBroadcastMessage(String message, String sessionId); ServerState getServerState(); + + public List getServerMessages(); } diff --git a/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesMessage.java b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesMessage.java new file mode 100644 index 00000000000..b57906e9bdb --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesMessage.java @@ -0,0 +1,22 @@ +package org.mage.network.model; + +import java.io.Serializable; +import java.util.List; + +/** + * + * @author BetaSteward + */ +public class ServerMessagesMessage implements Serializable { + + private List messages; + + public ServerMessagesMessage(List messages) { + this.messages = messages; + } + + public List getMessages() { + return messages; + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java new file mode 100644 index 00000000000..3e896113c95 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java @@ -0,0 +1,12 @@ +package org.mage.network.model; + +import java.io.Serializable; + +/** + * + * @author BetaSteward + */ +public class ServerMessagesRequest implements Serializable { + + +} diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index 8268674c41f..1002bcd5520 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -1152,6 +1152,12 @@ public class Main implements MageServer { // }); // } // + + @Override + public List getServerMessages() { + return ServerMessagesUtil.getInstance().getMessages(); + } + // @Override // public Object getServerMessagesCompressed(String sessionId) throws MageException { // return executeWithResult("getGameView", sessionId, new ActionWithNullNegativeResult() {