handle table join and waiting

This commit is contained in:
betasteward 2015-06-10 15:59:48 -04:00
parent c47da1f5b3
commit dcd2907112
28 changed files with 538 additions and 151 deletions

View file

@ -604,59 +604,79 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
* @param gameId
* @param playerId
*/
public void showGame(UUID gameId, UUID playerId) {
try {
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.showGame(gameId, playerId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
}
public void watchGame(UUID gameId) {
try {
for(Component component :desktopPane.getComponents()) {
if (component instanceof GamePane
&& ((GamePane) component).getGameId().equals(gameId)) {
setActive((GamePane) component);
return;
public void showGame(final UUID gameId, final UUID playerId) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.showGame(gameId, playerId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
}
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.watchGame(gameId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
});
}
public void replayGame(UUID gameId) {
try {
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.replayGame(gameId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
public void watchGame(final UUID gameId) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
for(Component component :desktopPane.getComponents()) {
if (component instanceof GamePane
&& ((GamePane) component).getGameId().equals(gameId)) {
setActive((GamePane) component);
return;
}
}
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.watchGame(gameId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
}
});
}
public void showDraft(UUID draftId) {
try {
DraftPane draftPane = new DraftPane();
desktopPane.add(draftPane, JLayeredPane.DEFAULT_LAYER);
draftPane.setMaximum(true);
draftPane.setVisible(true);
draftPane.showDraft(draftId);
setActive(draftPane);
} catch (PropertyVetoException ex) {
}
public void replayGame(final UUID gameId) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
GamePane gamePane = new GamePane();
desktopPane.add(gamePane, JLayeredPane.DEFAULT_LAYER);
gamePane.setMaximum(true);
gamePane.setVisible(true);
gamePane.replayGame(gameId);
setActive(gamePane);
} catch (PropertyVetoException ex) {
}
}
});
}
public void showDraft(final UUID draftId) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
DraftPane draftPane = new DraftPane();
desktopPane.add(draftPane, JLayeredPane.DEFAULT_LAYER);
draftPane.setMaximum(true);
draftPane.setVisible(true);
draftPane.showDraft(draftId);
setActive(draftPane);
} catch (PropertyVetoException ex) {
}
}
});
}
public void endDraft(UUID draftId) {
@ -669,35 +689,50 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
}
}
public void showTournament(UUID tournamentId) {
try {
for(Component component :desktopPane.getComponents()) {
if (component instanceof TournamentPane &&
((TournamentPane) component).getTournamentId().equals(tournamentId)) {
setActive((TournamentPane) component);
return;
public void showTournament(final UUID tournamentId) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
for(Component component :desktopPane.getComponents()) {
if (component instanceof TournamentPane &&
((TournamentPane) component).getTournamentId().equals(tournamentId)) {
setActive((TournamentPane) component);
return;
}
}
TournamentPane tournamentPane = new TournamentPane();
desktopPane.add(tournamentPane, JLayeredPane.DEFAULT_LAYER);
tournamentPane.setMaximum(true);
tournamentPane.setVisible(true);
tournamentPane.showTournament(tournamentId);
setActive(tournamentPane);
} catch (PropertyVetoException ex) {
}
}
TournamentPane tournamentPane = new TournamentPane();
desktopPane.add(tournamentPane, JLayeredPane.DEFAULT_LAYER);
tournamentPane.setMaximum(true);
tournamentPane.setVisible(true);
tournamentPane.showTournament(tournamentId);
setActive(tournamentPane);
} catch (PropertyVetoException ex) {
}
});
}
public void showGameEndDialog(GameEndView gameEndView) {
GameEndDialog gameEndDialog = new GameEndDialog(gameEndView);
desktopPane.add(gameEndDialog, JLayeredPane.MODAL_LAYER);
gameEndDialog.showDialog();
public void showGameEndDialog(final GameEndView gameEndView) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
GameEndDialog gameEndDialog = new GameEndDialog(gameEndView);
desktopPane.add(gameEndDialog, JLayeredPane.MODAL_LAYER);
gameEndDialog.showDialog();
}
});
}
public void showTableWaitingDialog(UUID roomId, UUID tableId, boolean isTournament) {
TableWaitingDialog tableWaitingDialog = new TableWaitingDialog();
desktopPane.add(tableWaitingDialog, JLayeredPane.MODAL_LAYER);
tableWaitingDialog.showDialog(roomId, tableId, isTournament);
public void showTableWaitingDialog(final UUID roomId, final UUID tableId, final UUID chatId, final boolean owner, final boolean tournament) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableWaitingDialog tableWaitingDialog = new TableWaitingDialog();
desktopPane.add(tableWaitingDialog, JLayeredPane.MODAL_LAYER);
tableWaitingDialog.showDialog(roomId, tableId, chatId, owner, tournament);
}
});
}
public boolean connect(Connection connection) {
@ -1358,29 +1393,21 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
}
public void showMessage(final String title, final String message) {
if (SwingUtilities.isEventDispatchThread()) {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.INFORMATION_MESSAGE);
} else {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.INFORMATION_MESSAGE);
}
});
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.INFORMATION_MESSAGE);
}
});
}
public void showError(final String title, final String message) {
if (SwingUtilities.isEventDispatchThread()) {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.ERROR_MESSAGE);
} else {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.ERROR_MESSAGE);
}
});
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(desktopPane, message, title, JOptionPane.ERROR_MESSAGE);
}
});
}
// @Override
@ -1438,6 +1465,11 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
return serverState;
}
@Override
public void joinedTable(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) {
showTableWaitingDialog(roomId, tableId, chatId, owner, tournament);
}
}
class MagePaneMenuItem extends JCheckBoxMenuItem {

View file

@ -110,13 +110,13 @@ public class TableWaitingDialog extends MageDialog {
}
}
public void showDialog(UUID roomId, UUID tableId, boolean isTournament) {
public void showDialog(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean isTournament) {
this.roomId = roomId;
this.tableId = tableId;
this.isTournament = isTournament;
client = MageFrame.getClient();
updateTask = new UpdateSeatsTask(client, roomId, tableId, this);
if (client.isTableOwner(roomId, tableId)) {
if (owner) {
this.btnStart.setVisible(true);
this.btnMoveDown.setVisible(true);
this.btnMoveUp.setVisible(true);
@ -125,7 +125,7 @@ public class TableWaitingDialog extends MageDialog {
this.btnMoveDown.setVisible(false);
this.btnMoveUp.setVisible(false);
}
UUID chatId = client.getTableChatId(tableId);
// UUID chatId = client.getTableChatId(tableId);
if (chatId != null) {
this.chatPanel.connect(chatId);
updateTask.execute();

View file

@ -161,12 +161,12 @@ public class CallbackClientImpl implements CallbackClient {
JOptionPane.showMessageDialog(null, message.getMessage(), "Server message", JOptionPane.INFORMATION_MESSAGE);
}
} break;
case "joinedTable":
{
TableClientMessage message = (TableClientMessage) callback.getData();
joinedTable(message.getRoomId(), message.getTableId(), message.getFlag());
break;
}
// case "joinedTable":
// {
// TableClientMessage message = (TableClientMessage) callback.getData();
// joinedTable(message.getRoomId(), message.getTableId(), message.getFlag());
// break;
// }
case "replayInit":
{
GamePanel panel = MageFrame.getGame(callback.getObjectId());
@ -425,13 +425,13 @@ public class CallbackClientImpl implements CallbackClient {
// }
// }
private void joinedTable(UUID roomId, UUID tableId, boolean isTournament) {
try {
frame.showTableWaitingDialog(roomId, tableId, isTournament);
} catch (Exception ex) {
handleException(ex);
}
}
// private void joinedTable(UUID roomId, UUID tableId, boolean isTournament) {
// try {
// frame.showTableWaitingDialog(roomId, tableId, isTournament);
// } catch (Exception ex) {
// handleException(ex);
// }
// }
protected void gameStarted(final UUID gameId, final UUID playerId) {
try {

View file

@ -122,6 +122,11 @@ public class MultiConnectTest {
public ServerState getServerState() {
return serverState;
}
@Override
public void joinedTable(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) {
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

@ -13,7 +13,6 @@ import io.netty.handler.codec.serialization.ObjectEncoder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.handler.timeout.IdleStateHandler;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@ -27,8 +26,6 @@ import mage.interfaces.ServerState;
import mage.players.net.UserSkipPrioritySteps;
import mage.utils.MageVersion;
import mage.view.DraftPickView;
import mage.view.MatchView;
import mage.view.RoomUsersView;
import mage.view.RoomView;
import mage.view.TableView;
import mage.view.TournamentView;
@ -43,9 +40,12 @@ import org.mage.network.handlers.client.ClientRegisteredMessageHandler;
import org.mage.network.handlers.client.ConnectionHandler;
import org.mage.network.handlers.client.InformClientMessageHandler;
import org.mage.network.handlers.client.JoinTableMessageHandler;
import org.mage.network.handlers.client.JoinedTableMessageHandler;
import org.mage.network.handlers.client.LeaveTableMessageHandler;
import org.mage.network.handlers.client.ServerMessageHandler;
import org.mage.network.handlers.client.RoomMessageHandler;
import org.mage.network.handlers.client.TableMessageHandler;
import org.mage.network.handlers.client.TableWaitingMessageHandler;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
@ -71,6 +71,9 @@ public class Client {
private final RoomMessageHandler roomMessageHandler;
private final TableMessageHandler tableMessageHandler;
private final JoinTableMessageHandler joinTableMessageHandler;
private final JoinedTableMessageHandler joinedTableMessageHandler;
private final TableWaitingMessageHandler tableWaitingMessageHandler;
private final LeaveTableMessageHandler leaveTableMessageHandler;
private final ExceptionHandler exceptionHandler;
@ -93,6 +96,9 @@ public class Client {
roomMessageHandler = new RoomMessageHandler();
tableMessageHandler = new TableMessageHandler();
joinTableMessageHandler = new JoinTableMessageHandler();
joinedTableMessageHandler = new JoinedTableMessageHandler(client);
tableWaitingMessageHandler = new TableWaitingMessageHandler();
leaveTableMessageHandler = new LeaveTableMessageHandler();
exceptionHandler = new ExceptionHandler();
}
@ -160,6 +166,9 @@ public class Client {
ch.pipeline().addLast("roomMessageHandler", roomMessageHandler);
ch.pipeline().addLast("tableMessageHandler", tableMessageHandler);
ch.pipeline().addLast("joinTableMessageHandler", joinTableMessageHandler);
ch.pipeline().addLast("joinedTableMessageHandler", joinedTableMessageHandler);
ch.pipeline().addLast("tableWaitingMessageHandler", tableWaitingMessageHandler);
ch.pipeline().addLast("leaveTableMessageHandler", leaveTableMessageHandler);
ch.pipeline().addLast("exceptionHandler", exceptionHandler);
}
@ -278,7 +287,12 @@ public class Client {
}
public boolean leaveTable(UUID roomId, UUID tableId) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
try {
return leaveTableMessageHandler.leaveTable(roomId, tableId);
} catch (Exception ex) {
logger.error("Error creating table", ex);
}
return false;
}
public void swapSeats(UUID roomId, UUID tableId, int row, int i) {
@ -290,7 +304,12 @@ public class Client {
}
public TableView getTable(UUID roomId, UUID tableId) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
try {
return tableWaitingMessageHandler.getTable(roomId, tableId);
} catch (Exception ex) {
logger.error("Error getting chat room id", ex);
}
return null;
}
public void watchTournamentTable(UUID tableId) {

View file

@ -32,12 +32,15 @@ import org.mage.network.handlers.server.ConnectionHandler;
import org.mage.network.handlers.server.JoinChatMessageHandler;
import org.mage.network.handlers.server.JoinTableMessageHandler;
import org.mage.network.handlers.server.LeaveChatMessageHandler;
import org.mage.network.handlers.server.LeaveTableMessageHandler;
import org.mage.network.handlers.server.RegisterClientMessageHandler;
import org.mage.network.handlers.server.RoomMessageHandler;
import org.mage.network.handlers.server.ServerMessageHandler;
import org.mage.network.handlers.server.TableMessageHandler;
import org.mage.network.handlers.server.TableWaitingMessageHandler;
import org.mage.network.interfaces.MageServer;
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.model.ReceiveChatMessage;
@ -71,6 +74,8 @@ public class Server {
private final RoomMessageHandler roomMessageHandler;
private final TableMessageHandler tableMessageHandler;
private final JoinTableMessageHandler joinTableMessageHandler;
private final TableWaitingMessageHandler tableWaitingMessageHandler;
private final LeaveTableMessageHandler leaveTableMessageHandler;
private final ExceptionHandler exceptionHandler;
@ -85,6 +90,8 @@ public class Server {
roomMessageHandler = new RoomMessageHandler(server);
tableMessageHandler = new TableMessageHandler(server);
joinTableMessageHandler = new JoinTableMessageHandler(server);
tableWaitingMessageHandler = new TableWaitingMessageHandler(server);
leaveTableMessageHandler = new LeaveTableMessageHandler(server);
exceptionHandler = new ExceptionHandler();
}
@ -117,7 +124,7 @@ public class Server {
}
}
private class ServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
@ -144,6 +151,8 @@ public class Server {
ch.pipeline().addLast(handlersExecutor, "roomMessageHandler", roomMessageHandler);
ch.pipeline().addLast(handlersExecutor, "tableMessageHandler", tableMessageHandler);
ch.pipeline().addLast(handlersExecutor, "joinTableMessageHandler", joinTableMessageHandler);
ch.pipeline().addLast(handlersExecutor, "tableWaitingMessageHandler", tableWaitingMessageHandler);
ch.pipeline().addLast(handlersExecutor, "leaveTableMessageHandler", leaveTableMessageHandler);
ch.pipeline().addLast("exceptionHandler", exceptionHandler);
}
@ -182,5 +191,12 @@ public class Server {
heartbeatHandler.pingClient();
}
}
public void joinedTable(String sessionId, UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) {
Channel ch = findChannel(sessionId);
if (ch != null)
ch.writeAndFlush(new JoinedTableMessage(roomId, tableId, chatId, owner, tournament));
}
}

View file

@ -31,6 +31,7 @@ public class ChatRoomHandler extends SimpleChannelInboundHandler<ChatRoomIdMessa
}
public UUID getChatRoomId(UUID id) throws Exception {
queue.clear();
ctx.writeAndFlush(new ChatRoomIdRequest(id));
return queue.take();
}

View file

@ -2,12 +2,10 @@ 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;
@ -17,8 +15,6 @@ import org.mage.network.model.RegisterClientMessage;
*/
public class ClientRegisteredMessageHandler extends SimpleChannelInboundHandler<ClientRegisteredMessage> {
// private final MageClient client;
// private ChannelHandlerContext ctx;
private final BlockingQueue<ServerState> queue = new LinkedBlockingQueue<>();
private String userName;
private MageVersion version;

View file

@ -6,10 +6,6 @@ import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import mage.cards.decks.DeckCardLists;
import mage.game.match.MatchOptions;
import mage.view.TableView;
import org.mage.network.model.CreateTableMessage;
import org.mage.network.model.CreateTableRequest;
import org.mage.network.model.JoinTableMessage;
import org.mage.network.model.JoinTableRequest;
@ -35,6 +31,7 @@ public class JoinTableMessageHandler extends SimpleChannelInboundHandler<JoinTab
}
public boolean joinTable(UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws Exception {
queue.clear();
ctx.writeAndFlush(new JoinTableRequest(roomId, tableId, name, playerType, skill, deckList, password));
return queue.take();
}

View file

@ -0,0 +1,28 @@
package org.mage.network.handlers.client;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.JoinedTableMessage;
/**
*
* @author BetaSteward
*/
public class JoinedTableMessageHandler extends SimpleChannelInboundHandler<JoinedTableMessage> {
private final MageClient client;
public JoinedTableMessageHandler (MageClient client) {
this.client = client;
}
@Override
protected void messageReceived(ChannelHandlerContext ctx, JoinedTableMessage msg) throws Exception {
client.joinedTable(msg.getRoomId(), msg.getTableId(), msg.getChatId(), msg.isOwner(), msg.isTournament());
}
}

View file

@ -0,0 +1,41 @@
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.cards.decks.DeckCardLists;
import org.mage.network.model.JoinTableMessage;
import org.mage.network.model.JoinTableRequest;
import org.mage.network.model.LeaveTableRequest;
import org.mage.network.model.LeftTableMessage;
/**
*
* @author BetaSteward
*/
public class LeaveTableMessageHandler extends SimpleChannelInboundHandler<LeftTableMessage> {
private ChannelHandlerContext ctx;
private final BlockingQueue<Boolean> queue = new LinkedBlockingQueue<>();
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
this.ctx = ctx;
super.channelActive(ctx);
}
@Override
protected void messageReceived(ChannelHandlerContext ctx, LeftTableMessage msg) throws Exception {
queue.offer(msg.getSuccess());
}
public boolean leaveTable(UUID roomId, UUID tableId) throws Exception {
queue.clear();
ctx.writeAndFlush(new LeaveTableRequest(roomId, tableId));
return queue.take();
}
}

View file

@ -31,6 +31,7 @@ public class RoomMessageHandler extends SimpleChannelInboundHandler<RoomMessage>
}
public RoomView getRoom(UUID roomId) throws Exception {
queue.clear();
ctx.writeAndFlush(new RoomRequest(roomId));
return queue.take();
}

View file

@ -30,6 +30,7 @@ public class ServerMessageHandler extends SimpleChannelInboundHandler<ServerMess
}
public List<String> getServerMessages() throws Exception {
queue.clear();
ctx.writeAndFlush(new ServerMessagesRequest());
return queue.take();
}

View file

@ -0,0 +1,39 @@
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.view.TableView;
import org.mage.network.model.TableWaitingMessage;
import org.mage.network.model.TableWaitingRequest;
/**
*
* @author BetaSteward
*/
public class TableWaitingMessageHandler extends SimpleChannelInboundHandler<TableWaitingMessage> {
private ChannelHandlerContext ctx;
private final BlockingQueue<TableView> queue = new LinkedBlockingQueue<>();
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
this.ctx = ctx;
super.channelActive(ctx);
}
@Override
protected void messageReceived(ChannelHandlerContext ctx, TableWaitingMessage msg) throws Exception {
queue.offer(msg.getRoom());
}
public TableView getTable(UUID roomId, UUID tableId) throws Exception {
queue.clear();
ctx.writeAndFlush(new TableWaitingRequest(roomId, tableId));
return queue.take();
}
}

View file

@ -22,7 +22,7 @@ public class JoinTableMessageHandler extends SimpleChannelInboundHandler<JoinTab
@Override
public void messageReceived(ChannelHandlerContext ctx, JoinTableRequest msg) {
ctx.writeAndFlush(new JoinTableMessage(server.joinTable(ctx.channel().id().asLongText(), msg.getRoomId(), msg.gettableId(), msg.getName(), msg.getPlayerType(), msg.getSkill(), msg.getDeckCardLists(), msg.getPassword())));
ctx.writeAndFlush(new JoinTableMessage(server.joinTable(ctx.channel().id().asLongText(), msg.getRoomId(), msg.getTableId(), msg.getName(), msg.getPlayerType(), msg.getSkill(), msg.getDeckCardLists(), msg.getPassword())));
}
}

View file

@ -0,0 +1,32 @@
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.JoinTableMessage;
import org.mage.network.model.JoinTableRequest;
import org.mage.network.model.JoinedTableMessage;
import org.mage.network.model.LeaveTableRequest;
import org.mage.network.model.LeftTableMessage;
/**
*
* @author BetaSteward
*/
@Sharable
public class LeaveTableMessageHandler extends SimpleChannelInboundHandler<LeaveTableRequest> {
private final MageServer server;
public LeaveTableMessageHandler (MageServer server) {
this.server = server;
}
@Override
public void messageReceived(ChannelHandlerContext ctx, LeaveTableRequest msg) {
LeftTableMessage resp = new LeftTableMessage(server.leaveTable(ctx.channel().id().asLongText(), msg.getRoomId(), msg.getTableId()));
ctx.writeAndFlush(resp);
}
}

View file

@ -0,0 +1,28 @@
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.TableWaitingMessage;
import org.mage.network.model.TableWaitingRequest;
/**
*
* @author BetaSteward
*/
@Sharable
public class TableWaitingMessageHandler extends SimpleChannelInboundHandler<TableWaitingRequest> {
private final MageServer server;
public TableWaitingMessageHandler (MageServer server) {
this.server = server;
}
@Override
public void messageReceived(ChannelHandlerContext ctx, TableWaitingRequest msg) {
ctx.writeAndFlush(new TableWaitingMessage(server.getTable(msg.getRoomId(), msg.getTableId())));
}
}

View file

@ -22,4 +22,5 @@ public interface MageClient {
void clientRegistered(ServerState state);
ServerState getServerState();
void joinedTable(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament);
}

View file

@ -2,9 +2,7 @@ package org.mage.network.interfaces;
import java.util.List;
import java.util.UUID;
import mage.MageException;
import mage.cards.decks.DeckCardLists;
import mage.game.GameException;
import mage.game.match.MatchOptions;
import mage.interfaces.ServerState;
import mage.remote.DisconnectReason;
@ -33,6 +31,9 @@ public interface MageServer {
RoomView getRoom(UUID roomId);
TableView createTable(String sessionId, UUID roomId, MatchOptions options);
boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password);
TableView getTable(UUID roomId, UUID tableId);
boolean leaveTable(String asLongText, UUID roomId, UUID tableId);
void pingTime(long milliSeconds, String sessionId);
}

View file

@ -32,7 +32,7 @@ public class JoinTableRequest implements Serializable {
return roomId;
}
public UUID gettableId() {
public UUID getTableId() {
return tableId;
}

View file

@ -0,0 +1,45 @@
package org.mage.network.model;
import java.io.Serializable;
import java.util.UUID;
/**
*
* @author BetaSteward
*/
public class JoinedTableMessage implements Serializable {
private UUID roomId;
private UUID tableId;
private UUID chatId;
private boolean owner;
private boolean tournament;
public JoinedTableMessage(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) {
this.roomId = roomId;
this.tableId = tableId;
this.chatId = chatId;
this.owner = owner;
this.tournament = tournament;
}
public UUID getRoomId() {
return roomId;
}
public UUID getTableId() {
return tableId;
}
public UUID getChatId() {
return chatId;
}
public boolean isOwner() {
return owner;
}
public boolean isTournament() {
return tournament;
}
}

View file

@ -0,0 +1,28 @@
package org.mage.network.model;
import java.io.Serializable;
import java.util.UUID;
/**
*
* @author BetaSteward
*/
public class LeaveTableRequest implements Serializable {
private UUID roomId;
private UUID tableId;
public LeaveTableRequest(UUID roomId, UUID tableId) {
this.roomId = roomId;
this.tableId = tableId;
}
public UUID getRoomId() {
return roomId;
}
public UUID getTableId() {
return tableId;
}
}

View file

@ -0,0 +1,21 @@
package org.mage.network.model;
import java.io.Serializable;
/**
*
* @author BetaSteward
*/
public class LeftTableMessage implements Serializable {
private boolean success;
public LeftTableMessage(boolean success) {
this.success = success;
}
public boolean getSuccess() {
return success;
}
}

View file

@ -0,0 +1,22 @@
package org.mage.network.model;
import java.io.Serializable;
import mage.view.TableView;
/**
*
* @author BetaSteward
*/
public class TableWaitingMessage implements Serializable {
private TableView table;
public TableWaitingMessage(TableView table) {
this.table = table;
}
public TableView getRoom() {
return table;
}
}

View file

@ -0,0 +1,28 @@
package org.mage.network.model;
import java.io.Serializable;
import java.util.UUID;
/**
*
* @author BetaSteward
*/
public class TableWaitingRequest implements Serializable {
private UUID roomId;
private UUID tableId;
public TableWaitingRequest(UUID roomId, UUID tableId) {
this.roomId = roomId;
this.tableId = tableId;
}
public UUID getRoomId() {
return roomId;
}
public UUID getTableId() {
return tableId;
}
}

View file

@ -470,22 +470,22 @@ public class Main implements MageServer {
// return null;
// }
//
// @Override
// //FIXME: why no sessionId here???
// public TableView getTable(UUID roomId, UUID tableId) throws MageException {
@Override
//FIXME: why no sessionId here???
public TableView getTable(UUID roomId, UUID tableId) {
// try {
// GamesRoom room = GamesRoomManager.getInstance().getRoom(roomId);
// if (room != null) {
// return room.getTable(tableId);
// } else {
// return null;
// }
GamesRoom room = GamesRoomManager.getInstance().getRoom(roomId);
if (room != null) {
return room.getTable(tableId);
} else {
return null;
}
// }
// catch (Exception ex) {
// handleException(ex);
// }
// return null;
// }
}
//
// @Override
// public boolean ping(String sessionId, String pingInfo) {
@ -674,22 +674,22 @@ public class Main implements MageServer {
// });
// }
//
// @Override
// public boolean leaveTable(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
// TableState tableState = TableManager.getInstance().getController(tableId).getTableState();
// if (!tableState.equals(TableState.WAITING) && !tableState.equals(TableState.READY_TO_START)) {
// // table was already started, so player can't leave anymore now
// return false;
// }
@Override
public boolean leaveTable(final String sessionId, final UUID roomId, final UUID tableId) {
TableState tableState = TableManager.getInstance().getController(tableId).getTableState();
if (!tableState.equals(TableState.WAITING) && !tableState.equals(TableState.READY_TO_START)) {
// table was already started, so player can't leave anymore now
return false;
}
// execute("leaveTable", sessionId, new Action() {
// @Override
// public void execute() {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// GamesRoomManager.getInstance().getRoom(roomId).leaveTable(userId, tableId);
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
GamesRoomManager.getInstance().getRoom(roomId).leaveTable(userId, tableId);
// }
// });
// return true;
// }
return true;
}
//
// @Override
// //FIXME: why no sessionId here???
@ -1377,4 +1377,8 @@ public class Main implements MageServer {
return testMode;
}
public void joinedTable(String sessionId, UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) {
server.joinedTable(sessionId, roomId, tableId, chatId, owner, tournament);
}
}

View file

@ -35,7 +35,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import mage.MageException;
import mage.cards.decks.Deck;
import mage.cards.decks.DeckCardLists;
@ -222,7 +221,7 @@ public class TableController {
if (seat.getPlayer().isHuman()) {
seat.getPlayer().setUserData(user.getUserData());
user.addTable(player.getId(), table);
user.ccJoinedTable(table.getRoomId(), table.getId(), true);
user.joinedTable(table.getRoomId(), table.getId(), chatId, isOwner(userId), true);
userPlayerMap.put(userId, player.getId());
}
@ -325,7 +324,7 @@ public class TableController {
if (!table.isTournamentSubTable()) {
user.addTable(player.getId(), table);
}
user.ccJoinedTable(table.getRoomId(), table.getId(), false);
user.joinedTable(table.getRoomId(), table.getId(), chatId, isOwner(userId), false);
userPlayerMap.put(userId, player.getId());
}
return true;

View file

@ -188,8 +188,9 @@ public class User {
}
}
public void ccJoinedTable(final UUID roomId, final UUID tableId, boolean isTournament) {
fireCallback(new ClientCallback("joinedTable", tableId, new TableClientMessage(roomId, tableId, isTournament)));
public void joinedTable(final UUID roomId, final UUID tableId, final UUID chatId, boolean owner, boolean tournament) {
// fireCallback(new ClientCallback("joinedTable", tableId, new TableClientMessage(roomId, tableId, isTournament)));
Main.getInstance().joinedTable(sessionId, roomId, tableId, chatId, owner, tournament);
}
public void ccGameStarted(final UUID gameId, final UUID playerId) {
@ -285,7 +286,8 @@ public class User {
private void reconnect() {
for (Entry<UUID, Table> entry: tables.entrySet()) {
ccJoinedTable(entry.getValue().getRoomId(), entry.getValue().getId(), entry.getValue().isTournament());
Table t = entry.getValue();
joinedTable(t.getRoomId(), t.getId(), TableManager.getInstance().getChatId(t.getId()), TableManager.getInstance().isTableOwner(t.getId(), userId), t.isTournament());
}
for (Entry<UUID, UUID> entry: userTournaments.entrySet()) {
TournamentController tournamentController = TournamentManager.getInstance().getTournamentController(entry.getValue());