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

@ -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;
}
}