mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 04:22:01 -08:00
handle table join and waiting
This commit is contained in:
parent
c47da1f5b3
commit
dcd2907112
28 changed files with 538 additions and 151 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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())));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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())));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class JoinTableRequest implements Serializable {
|
|||
return roomId;
|
||||
}
|
||||
|
||||
public UUID gettableId() {
|
||||
public UUID getTableId() {
|
||||
return tableId;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue