diff --git a/Mage.Network/src/main/java/org/mage/network/Client.java b/Mage.Network/src/main/java/org/mage/network/Client.java index 759f9c3e6d8..22f806306be 100644 --- a/Mage.Network/src/main/java/org/mage/network/Client.java +++ b/Mage.Network/src/main/java/org/mage/network/Client.java @@ -237,7 +237,12 @@ public class Client { } public boolean startMatch(UUID roomId, UUID tableId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + return clientMessageHandler.startMatch(roomId, tableId); + } catch (Exception ex) { + logger.error("Error starting match", ex); + } + return false; } public boolean startTournament(UUID roomId, UUID tableId) { diff --git a/Mage.Network/src/main/java/org/mage/network/Server.java b/Mage.Network/src/main/java/org/mage/network/Server.java index 985037c0c4c..f51cd3edff9 100644 --- a/Mage.Network/src/main/java/org/mage/network/Server.java +++ b/Mage.Network/src/main/java/org/mage/network/Server.java @@ -28,12 +28,12 @@ import org.mage.network.handlers.MessageHandler; import org.mage.network.handlers.server.HeartbeatHandler; import org.mage.network.handlers.PingMessageHandler; import org.mage.network.handlers.WriteListener; -import org.mage.network.handlers.server.ChatMessageHandler; +//import org.mage.network.handlers.server.ChatMessageHandler; import org.mage.network.handlers.server.ConnectionHandler; -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.RegisterClientMessageHandler; +//import org.mage.network.handlers.server.RoomMessageHandler; +import org.mage.network.handlers.server.ServerRequestHandler; +//import org.mage.network.handlers.server.TableMessageHandler; import org.mage.network.interfaces.MageServer; import org.mage.network.model.ChatMessageMessage; import org.mage.network.model.InformClientMessage; @@ -61,23 +61,23 @@ public class Server { // private final MessageHandler h; private final PingMessageHandler pingMessageHandler = new PingMessageHandler(); private final EventExecutorGroup handlersExecutor = new DefaultEventExecutorGroup(Runtime.getRuntime().availableProcessors() * 2); - private final RegisterClientMessageHandler registerClientMessageHandler; +// private final RegisterClientMessageHandler registerClientMessageHandler; - private final ChatMessageHandler chatMessageHandler; - private final ServerMessageHandler serverMessageHandler; - private final RoomMessageHandler roomMessageHandler; - private final TableMessageHandler tableMessageHandler; +// private final ChatMessageHandler chatMessageHandler; + private final ServerRequestHandler serverMessageHandler; +// private final RoomMessageHandler roomMessageHandler; +// private final TableMessageHandler tableMessageHandler; private final ExceptionHandler exceptionHandler; public Server(MageServer server) { this.server = server; // h = new MessageHandler(); - registerClientMessageHandler = new RegisterClientMessageHandler(server); - chatMessageHandler = new ChatMessageHandler(server); - serverMessageHandler = new ServerMessageHandler(server); - roomMessageHandler = new RoomMessageHandler(server); - tableMessageHandler = new TableMessageHandler(server); +// registerClientMessageHandler = new RegisterClientMessageHandler(server); +// chatMessageHandler = new ChatMessageHandler(server); + serverMessageHandler = new ServerRequestHandler(server); +// roomMessageHandler = new RoomMessageHandler(server); +// tableMessageHandler = new TableMessageHandler(server); exceptionHandler = new ExceptionHandler(); } @@ -128,12 +128,12 @@ public class Server { ch.pipeline().addLast("pingMessageHandler", pingMessageHandler); ch.pipeline().addLast("connectionHandler", new ConnectionHandler()); - ch.pipeline().addLast(handlersExecutor, "registerClientMessageHandler", registerClientMessageHandler); +// ch.pipeline().addLast(handlersExecutor, "registerClientMessageHandler", registerClientMessageHandler); - ch.pipeline().addLast(handlersExecutor, "chatMessageHandler", chatMessageHandler); +// ch.pipeline().addLast(handlersExecutor, "chatMessageHandler", chatMessageHandler); ch.pipeline().addLast(handlersExecutor, "serverMessageHandler", serverMessageHandler); - ch.pipeline().addLast(handlersExecutor, "roomMessageHandler", roomMessageHandler); - ch.pipeline().addLast(handlersExecutor, "tableMessageHandler", tableMessageHandler); +// ch.pipeline().addLast(handlersExecutor, "roomMessageHandler", roomMessageHandler); +// ch.pipeline().addLast(handlersExecutor, "tableMessageHandler", tableMessageHandler); ch.pipeline().addLast("exceptionHandler", exceptionHandler); } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/PingMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/PingMessageHandler.java index a42ebec1e89..04a37ad74cc 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/PingMessageHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/PingMessageHandler.java @@ -19,7 +19,7 @@ public class PingMessageHandler extends SimpleChannelInboundHandler @Override protected void messageReceived(ChannelHandlerContext ctx, PingMessage msg) throws Exception { - ctx.writeAndFlush(pong); + ctx.writeAndFlush(pong).addListener(WriteListener.getInstance()); logger.info("Received ping. Sending pong"); } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java index 3b4991f3fc7..bb3f77058a2 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientMessageHandler.java @@ -23,6 +23,7 @@ import org.mage.network.model.LeaveChatRequest; import org.mage.network.model.LeaveTableRequest; import org.mage.network.model.RemoveTableRequest; import org.mage.network.model.ServerMessagesRequest; +import org.mage.network.model.StartMatchRequest; import org.mage.network.model.SwapSeatRequest; import org.mage.network.model.TableWaitingRequest; @@ -97,6 +98,12 @@ public class ClientMessageHandler extends SimpleChannelInboundHandler { - - private final MageServer server; - - public ChatMessageHandler(MageServer server) { - this.server = server; - } - - @Override - public void messageReceived(ChannelHandlerContext ctx, ChatRequest msg) { - if (msg instanceof JoinChatRequest) { - server.joinChat(msg.getChatId(), ctx.channel().id().asLongText()); - } - if (msg instanceof ChatMessageRequest) { - ChatMessageRequest r = (ChatMessageRequest)msg; - server.receiveChatMessage(r.getChatId(), ctx.channel().id().asLongText(), r.getMessage()); - } - if (msg instanceof LeaveChatRequest) { - server.leaveChat(msg.getChatId(), ctx.channel().id().asLongText()); - } - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/HeartbeatHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/HeartbeatHandler.java index 0011c9630d9..5638a6833df 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/HeartbeatHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/server/HeartbeatHandler.java @@ -1,6 +1,5 @@ package org.mage.network.handlers.server; -import io.netty.channel.ChannelHandler.Sharable; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.timeout.IdleState; @@ -8,6 +7,7 @@ import io.netty.handler.timeout.IdleStateEvent; import java.util.concurrent.TimeUnit; import mage.remote.DisconnectReason; import org.apache.log4j.Logger; +import org.mage.network.handlers.WriteListener; import org.mage.network.interfaces.MageServer; import org.mage.network.model.PingMessage; import org.mage.network.model.PongMessage; @@ -47,7 +47,7 @@ public class HeartbeatHandler extends ChannelHandlerAdapter { logger.info("Disconnected due to extended idle"); } else if (e.state() == IdleState.WRITER_IDLE) { startTime = System.nanoTime(); - ctx.writeAndFlush(ping); + ctx.writeAndFlush(ping).addListener(WriteListener.getInstance()); logger.info("Sending ping"); } } @@ -64,6 +64,6 @@ public class HeartbeatHandler extends ChannelHandlerAdapter { public void pingClient() { startTime = System.nanoTime(); - ctx.writeAndFlush(ping); + ctx.writeAndFlush(ping).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/RegisterClientMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/RegisterClientMessageHandler.java deleted file mode 100644 index 3646c4f8a9b..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/RegisterClientMessageHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.mage.network.handlers.server; - -import io.netty.channel.ChannelHandler.Sharable; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import java.net.InetSocketAddress; -import mage.interfaces.ServerState; -import mage.remote.DisconnectReason; -import org.mage.network.interfaces.MageServer; -import org.mage.network.model.RegisterClientRequest; -import org.mage.network.model.ClientRegisteredMessage; - -/** - * - * @author BetaSteward - */ -@Sharable -public class RegisterClientMessageHandler extends SimpleChannelInboundHandler { - - private final MageServer server; - - public RegisterClientMessageHandler (MageServer server) { - this.server = server; - } - - @Override - protected void messageReceived(ChannelHandlerContext ctx, RegisterClientRequest msg) throws Exception { - String host = ((InetSocketAddress)ctx.channel().remoteAddress()).getAddress().getHostAddress(); - boolean result = server.registerClient(msg.getConnection(), ctx.channel().id().asLongText(), msg.getMageVersion(), host); - if (result) { - ctx.writeAndFlush(new ClientRegisteredMessage(server.getServerState())); - } - else { - ctx.writeAndFlush(new ClientRegisteredMessage(new ServerState())); - server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.ValidationError); - } - } - - @Override - public void channelInactive(ChannelHandlerContext ctx) throws Exception { - server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.Disconnected); - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/RoomMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/RoomMessageHandler.java deleted file mode 100644 index 42612328536..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/RoomMessageHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -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.ChatRoomIdMessage; -import org.mage.network.model.ChatRoomIdRequest; -import org.mage.network.model.CreateTableMessage; -import org.mage.network.model.CreateTableRequest; -import org.mage.network.model.GetRoomRequest; -import org.mage.network.model.RoomMessage; -import org.mage.network.model.RoomRequest; - -/** - * - * @author BetaSteward - */ -@Sharable -public class RoomMessageHandler extends SimpleChannelInboundHandler { - - private final MageServer server; - - public RoomMessageHandler (MageServer server) { - this.server = server; - } - - @Override - public void messageReceived(ChannelHandlerContext ctx, RoomRequest msg) { - if (msg instanceof CreateTableRequest) { - CreateTableRequest r = (CreateTableRequest)msg; - ctx.writeAndFlush(new CreateTableMessage(server.createTable(ctx.channel().id().asLongText(), r.getRoomId(), r.getMatchOptions()))); - } - else if (msg instanceof ChatRoomIdRequest) { - ctx.writeAndFlush(new ChatRoomIdMessage(server.getRoomChatId(msg.getRoomId()))); - } - else if (msg instanceof GetRoomRequest) { - ctx.writeAndFlush(new RoomMessage(server.getRoom(msg.getRoomId()))); - } - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java deleted file mode 100644 index 00ac406b753..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerMessageHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.mage.network.handlers.server; - -import io.netty.channel.ChannelHandler.Sharable; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import org.mage.network.interfaces.MageServer; -import org.mage.network.model.ServerMessagesMessage; -import org.mage.network.model.ServerMessagesRequest; - -/** - * - * @author BetaSteward - */ -@Sharable -public class ServerMessageHandler extends SimpleChannelInboundHandler { - - private final MageServer server; - - public ServerMessageHandler (MageServer server) { - this.server = server; - } - - @Override - public void messageReceived(ChannelHandlerContext ctx, ServerMessagesRequest msg) { - ctx.writeAndFlush(new ServerMessagesMessage(server.getServerMessages())); - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerRequestHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerRequestHandler.java new file mode 100644 index 00000000000..8e1efecf7ed --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerRequestHandler.java @@ -0,0 +1,33 @@ +package org.mage.network.handlers.server; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import mage.remote.DisconnectReason; +import org.mage.network.interfaces.MageServer; +import org.mage.network.model.ServerRequest; + +/** + * + * @author BetaSteward + */ +@Sharable +public class ServerRequestHandler extends SimpleChannelInboundHandler { + + private final MageServer server; + + public ServerRequestHandler(MageServer server) { + this.server = server; + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, ServerRequest msg) { + msg.handleMessage(server, ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.Disconnected); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/TableMessageHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/TableMessageHandler.java deleted file mode 100644 index be4e38860b8..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/TableMessageHandler.java +++ /dev/null @@ -1,53 +0,0 @@ -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.CreateTableMessage; -import org.mage.network.model.CreateTableRequest; -import org.mage.network.model.JoinTableMessage; -import org.mage.network.model.JoinTableRequest; -import org.mage.network.model.LeaveTableRequest; -import org.mage.network.model.LeftTableMessage; -import org.mage.network.model.RemoveTableRequest; -import org.mage.network.model.SwapSeatRequest; -import org.mage.network.model.TableRequest; -import org.mage.network.model.TableWaitingMessage; -import org.mage.network.model.TableWaitingRequest; - -/** - * - * @author BetaSteward - */ -@Sharable -public class TableMessageHandler extends SimpleChannelInboundHandler { - - private final MageServer server; - - public TableMessageHandler (MageServer server) { - this.server = server; - } - - @Override - public void messageReceived(ChannelHandlerContext ctx, TableRequest msg) { - if (msg instanceof TableWaitingRequest) { - ctx.writeAndFlush(new TableWaitingMessage(server.getTable(msg.getRoomId(), msg.getTableId()))); - } - if (msg instanceof RemoveTableRequest) { - server.removeTable(ctx.channel().id().asLongText(), msg.getRoomId(), msg.getTableId()); - } - if (msg instanceof LeaveTableRequest) { - ctx.writeAndFlush(new LeftTableMessage(server.leaveTable(ctx.channel().id().asLongText(), msg.getRoomId(), msg.getTableId()))); - } - if (msg instanceof JoinTableRequest) { - JoinTableRequest r = (JoinTableRequest)msg; - ctx.writeAndFlush(new JoinTableMessage(server.joinTable(ctx.channel().id().asLongText(), r.getRoomId(), r.getTableId(), r.getName(), r.getPlayerType(), r.getSkill(), r.getDeckCardLists(), r.getPassword()))); - } - if (msg instanceof SwapSeatRequest) { - SwapSeatRequest r = (SwapSeatRequest)msg; - server.swapSeats(ctx.channel().id().asLongText(), r.getRoomId(), r.getTableId(), r.getSeatNum1(), r.getSeatNum2()); - } - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java index 5770bacde11..63638a29fcf 100644 --- a/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java +++ b/Mage.Network/src/main/java/org/mage/network/interfaces/MageServer.java @@ -36,7 +36,9 @@ public interface MageServer { boolean leaveTable(String sessionId, UUID roomId, UUID tableId); void removeTable(String sessionId, UUID roomId, UUID tableId); void swapSeats(String sessionId, UUID roomId, UUID tableId, int seatNum1, int seatNum2); - + + boolean startMatch(String sessionId, UUID roomId, UUID tableId); + void pingTime(long milliSeconds, String sessionId); } diff --git a/Mage.Network/src/main/java/org/mage/network/model/ChatMessageRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ChatMessageRequest.java index 54648b9fd9b..0b5533115d1 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/ChatMessageRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/ChatMessageRequest.java @@ -1,22 +1,26 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class ChatMessageRequest extends ChatRequest { +public class ChatMessageRequest extends ServerRequest { + private UUID chatId; private String message; public ChatMessageRequest(UUID chatId, String message) { - super(chatId); + this.chatId = chatId; this.message = message; } - - public String getMessage() { - return message; + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.receiveChatMessage(chatId, ctx.channel().id().asLongText(), message); } - + } diff --git a/Mage.Network/src/main/java/org/mage/network/model/ChatRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ChatRequest.java deleted file mode 100644 index 7ebd7e08714..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/model/ChatRequest.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.mage.network.model; - -import java.io.Serializable; -import java.util.UUID; - -/** - * - * @author BetaSteward - */ -public abstract class ChatRequest implements Serializable { - - private UUID chatId; - - public ChatRequest(UUID chatId) { - this.chatId = chatId; - } - - public UUID getChatId() { - return chatId; - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/model/ChatRoomIdRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ChatRoomIdRequest.java index a0e597a3fd8..e1a3164c514 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/ChatRoomIdRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/ChatRoomIdRequest.java @@ -1,15 +1,25 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class ChatRoomIdRequest extends RoomRequest { +public class ChatRoomIdRequest extends ServerRequest { + + private UUID roomId; public ChatRoomIdRequest(UUID roomId) { - super(roomId); + this.roomId = roomId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new ChatRoomIdMessage(server.getRoomChatId(roomId))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/CreateTableRequest.java b/Mage.Network/src/main/java/org/mage/network/model/CreateTableRequest.java index 77361097a68..bf3af1368e2 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/CreateTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/CreateTableRequest.java @@ -1,24 +1,28 @@ package org.mage.network.model; -import java.io.Serializable; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; import mage.game.match.MatchOptions; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class CreateTableRequest extends RoomRequest { +public class CreateTableRequest extends ServerRequest { + private UUID roomId; private MatchOptions options; public CreateTableRequest(UUID roomId, MatchOptions options) { - super(roomId); + this.roomId = roomId; this.options = options; } - public MatchOptions getMatchOptions() { - return options; + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new CreateTableMessage(server.createTable(ctx.channel().id().asLongText(), roomId, options))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/GetRoomRequest.java b/Mage.Network/src/main/java/org/mage/network/model/GetRoomRequest.java index 2fcf0a374d7..f6cf2aaa0fc 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/GetRoomRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/GetRoomRequest.java @@ -1,15 +1,25 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class GetRoomRequest extends RoomRequest { +public class GetRoomRequest extends ServerRequest { + + private UUID roomId; public GetRoomRequest(UUID roomId) { - super(roomId); + this.roomId = roomId; } - + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new RoomMessage(server.getRoom(roomId))).addListener(WriteListener.getInstance()); + } + } diff --git a/Mage.Network/src/main/java/org/mage/network/model/JoinChatRequest.java b/Mage.Network/src/main/java/org/mage/network/model/JoinChatRequest.java index 0a1d52428cb..7098f6dae50 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/JoinChatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/JoinChatRequest.java @@ -1,15 +1,24 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class JoinChatRequest extends ChatRequest { +public class JoinChatRequest extends ServerRequest { + + private UUID chatId; public JoinChatRequest(UUID chatId) { - super(chatId); + this.chatId = chatId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.joinChat(chatId, ctx.channel().id().asLongText()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/JoinTableRequest.java b/Mage.Network/src/main/java/org/mage/network/model/JoinTableRequest.java index 1702dc408d3..2598e89ca44 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/JoinTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/JoinTableRequest.java @@ -1,14 +1,19 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; import mage.cards.decks.DeckCardLists; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class JoinTableRequest extends TableRequest { +public class JoinTableRequest extends ServerRequest { + private UUID roomId; + private UUID tableId; private String name; private String playerType; private int skill; @@ -16,7 +21,8 @@ public class JoinTableRequest extends TableRequest { private String password; public JoinTableRequest(UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) { - super(roomId, tableId); + this.roomId = roomId; + this.tableId = tableId; this.name = name; this.playerType = playerType; this.skill = skill; @@ -24,24 +30,9 @@ public class JoinTableRequest extends TableRequest { this.password = password; } - public String getName() { - return name; - } - - public String getPlayerType() { - return playerType; - } - - public int getSkill() { - return skill; - } - - public DeckCardLists getDeckCardLists() { - return deckList; - } - - public String getPassword() { - return password; + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new JoinTableMessage(server.joinTable(ctx.channel().id().asLongText(), roomId, tableId, name, playerType, skill, deckList, password))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/LeaveChatRequest.java b/Mage.Network/src/main/java/org/mage/network/model/LeaveChatRequest.java index 3051653e92e..6a13ffd49f8 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/LeaveChatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/LeaveChatRequest.java @@ -1,15 +1,24 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class LeaveChatRequest extends ChatRequest { +public class LeaveChatRequest extends ServerRequest { + + private UUID chatId; public LeaveChatRequest(UUID chatId) { - super(chatId); + this.chatId = chatId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.leaveChat(chatId, ctx.channel().id().asLongText()); } diff --git a/Mage.Network/src/main/java/org/mage/network/model/LeaveTableRequest.java b/Mage.Network/src/main/java/org/mage/network/model/LeaveTableRequest.java index 11b247c4065..e2a7b51f7e1 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/LeaveTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/LeaveTableRequest.java @@ -1,16 +1,27 @@ package org.mage.network.model; -import java.io.Serializable; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class LeaveTableRequest extends TableRequest { +public class LeaveTableRequest extends ServerRequest { + + private UUID roomId; + private UUID tableId; public LeaveTableRequest(UUID roomId, UUID tableId) { - super(roomId, tableId); + this.roomId = roomId; + this.tableId = tableId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new LeftTableMessage(server.leaveTable(ctx.channel().id().asLongText(), roomId, tableId))).addListener(WriteListener.getInstance()); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/RegisterClientRequest.java b/Mage.Network/src/main/java/org/mage/network/model/RegisterClientRequest.java index 523a60236ad..8507575c52d 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/RegisterClientRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/RegisterClientRequest.java @@ -1,14 +1,19 @@ package org.mage.network.model; -import java.io.Serializable; +import io.netty.channel.ChannelHandlerContext; +import java.net.InetSocketAddress; +import mage.interfaces.ServerState; import mage.remote.Connection; +import mage.remote.DisconnectReason; import mage.utils.MageVersion; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class RegisterClientRequest implements Serializable { +public class RegisterClientRequest extends ServerRequest { private Connection connection; private MageVersion version; @@ -17,12 +22,17 @@ public class RegisterClientRequest implements Serializable { this.version = version; } - public Connection getConnection() { - return connection; - } - - public MageVersion getMageVersion() { - return version; + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + String host = ((InetSocketAddress)ctx.channel().remoteAddress()).getAddress().getHostAddress(); + boolean result = server.registerClient(connection, ctx.channel().id().asLongText(), version, host); + if (result) { + ctx.writeAndFlush(new ClientRegisteredMessage(server.getServerState())).addListener(WriteListener.getInstance()); + } + else { + ctx.writeAndFlush(new ClientRegisteredMessage(new ServerState())).addListener(WriteListener.getInstance()); + server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.ValidationError); + } } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/RemoveTableRequest.java b/Mage.Network/src/main/java/org/mage/network/model/RemoveTableRequest.java index 6a5b1f53452..631f773fdc9 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/RemoveTableRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/RemoveTableRequest.java @@ -1,17 +1,26 @@ package org.mage.network.model; -import java.io.Serializable; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class RemoveTableRequest extends TableRequest { +public class RemoveTableRequest extends ServerRequest { + private UUID roomId; + private UUID tableId; public RemoveTableRequest(UUID roomId, UUID tableId) { - super(roomId, tableId); + this.roomId = roomId; + this.tableId = tableId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.removeTable(ctx.channel().id().asLongText(), roomId, tableId); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/RoomRequest.java b/Mage.Network/src/main/java/org/mage/network/model/RoomRequest.java deleted file mode 100644 index bd995064d80..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/model/RoomRequest.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.mage.network.model; - -import java.io.Serializable; -import java.util.UUID; - -/** - * - * @author BetaSteward - */ -public abstract class RoomRequest implements Serializable { - - private UUID roomId; - - public RoomRequest(UUID roomId) { - this.roomId = roomId; - } - - public UUID getRoomId() { - return roomId; - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java index 3e896113c95..e781bc734f7 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/ServerMessagesRequest.java @@ -1,12 +1,19 @@ package org.mage.network.model; -import java.io.Serializable; +import io.netty.channel.ChannelHandlerContext; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class ServerMessagesRequest implements Serializable { +public class ServerMessagesRequest extends ServerRequest { + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new ServerMessagesMessage(server.getServerMessages())).addListener(WriteListener.getInstance()); + } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/ServerRequest.java b/Mage.Network/src/main/java/org/mage/network/model/ServerRequest.java new file mode 100644 index 00000000000..becf9b57974 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/model/ServerRequest.java @@ -0,0 +1,15 @@ +package org.mage.network.model; + +import io.netty.channel.ChannelHandlerContext; +import java.io.Serializable; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +public abstract class ServerRequest implements Serializable { + + public abstract void handleMessage(MageServer server, ChannelHandlerContext ctx); + +} diff --git a/Mage.Network/src/main/java/org/mage/network/model/SwapSeatRequest.java b/Mage.Network/src/main/java/org/mage/network/model/SwapSeatRequest.java index a4af0a09c20..a90b0e14e84 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/SwapSeatRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/SwapSeatRequest.java @@ -1,28 +1,30 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class SwapSeatRequest extends TableRequest { +public class SwapSeatRequest extends ServerRequest { + private UUID roomId; + private UUID tableId; private int seatNum1; private int seatNum2; public SwapSeatRequest(UUID roomId, UUID tableId, int seatNum1, int seatNum2) { - super(roomId, tableId); + this.roomId = roomId; + this.tableId = tableId; this.seatNum1 = seatNum1; this.seatNum2 = seatNum2; } - public int getSeatNum1() { - return seatNum1; - } - - public int getSeatNum2() { - return seatNum2; + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + server.swapSeats(ctx.channel().id().asLongText(), roomId, tableId, seatNum1, seatNum2); } } diff --git a/Mage.Network/src/main/java/org/mage/network/model/TableRequest.java b/Mage.Network/src/main/java/org/mage/network/model/TableRequest.java deleted file mode 100644 index fc1c7bf34c0..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/model/TableRequest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.mage.network.model; - -import java.io.Serializable; -import java.util.UUID; - -/** - * - * @author BetaSteward - */ -public abstract class TableRequest implements Serializable { - - protected UUID roomId; - protected UUID tableId; - - public TableRequest(UUID roomId, UUID tableId) { - this.roomId = roomId; - this.tableId = tableId; - } - - public UUID getRoomId() { - return roomId; - } - - public UUID getTableId() { - return tableId; - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/model/TableWaitingRequest.java b/Mage.Network/src/main/java/org/mage/network/model/TableWaitingRequest.java index f8eb2feffa6..f1af91cd7ab 100644 --- a/Mage.Network/src/main/java/org/mage/network/model/TableWaitingRequest.java +++ b/Mage.Network/src/main/java/org/mage/network/model/TableWaitingRequest.java @@ -1,15 +1,27 @@ package org.mage.network.model; +import io.netty.channel.ChannelHandlerContext; import java.util.UUID; +import org.mage.network.handlers.WriteListener; +import org.mage.network.interfaces.MageServer; /** * * @author BetaSteward */ -public class TableWaitingRequest extends TableRequest { +public class TableWaitingRequest extends ServerRequest { + private UUID roomId; + private UUID tableId; + public TableWaitingRequest(UUID roomId, UUID tableId) { - super(roomId, tableId); + this.roomId = roomId; + this.tableId = tableId; + } + + @Override + public void handleMessage(MageServer server, ChannelHandlerContext ctx) { + ctx.writeAndFlush(new TableWaitingMessage(server.getTable(roomId, tableId))).addListener(WriteListener.getInstance()); } }