mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 04:22:01 -08:00
client registration is now a blocking call on the client side + added server messages handlers
This commit is contained in:
parent
d2ae55fff6
commit
b68cd765b7
11 changed files with 194 additions and 31 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> 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<TableView> getTables(UUID roomId) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ClientRegisteredMessage> {
|
||||
|
||||
private final MageClient client;
|
||||
|
||||
private final MageClient client;
|
||||
// private ChannelHandlerContext ctx;
|
||||
private final BlockingQueue<ServerState> 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ServerMessagesMessage> {
|
||||
|
||||
private ChannelHandlerContext ctx;
|
||||
private final BlockingQueue<List<String>> 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<String> getServerMessages() throws Exception {
|
||||
ctx.writeAndFlush(new ServerMessagesRequest());
|
||||
return queue.take();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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<ServerMessagesRequest> {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String> getServerMessages();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> messages;
|
||||
|
||||
public ServerMessagesMessage(List<String> messages) {
|
||||
this.messages = messages;
|
||||
}
|
||||
|
||||
public List<String> getMessages() {
|
||||
return messages;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package org.mage.network.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward
|
||||
*/
|
||||
public class ServerMessagesRequest implements Serializable {
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1152,6 +1152,12 @@ public class Main implements MageServer {
|
|||
// });
|
||||
// }
|
||||
//
|
||||
|
||||
@Override
|
||||
public List<String> getServerMessages() {
|
||||
return ServerMessagesUtil.getInstance().getMessages();
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public Object getServerMessagesCompressed(String sessionId) throws MageException {
|
||||
// return executeWithResult("getGameView", sessionId, new ActionWithNullNegativeResult<Object>() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue