use same paradigm on server side - reduces the number of handlers in the pipeline

This commit is contained in:
betasteward 2015-06-16 13:51:03 -04:00
parent dd8fe2d05c
commit 19ad01ced8
30 changed files with 243 additions and 372 deletions

View file

@ -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) {

View file

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

View file

@ -19,7 +19,7 @@ public class PingMessageHandler extends SimpleChannelInboundHandler<PingMessage>
@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");
}

View file

@ -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<ClientMess
return booleanQueue.take();
}
public boolean startMatch(UUID roomId, UUID tableId) throws Exception {
booleanQueue.clear();
ctx.writeAndFlush(new StartMatchRequest(roomId, tableId)).addListener(WriteListener.getInstance());
return booleanQueue.take();
}
public void joinChat(UUID chatId) {
ctx.writeAndFlush(new JoinChatRequest(chatId)).addListener(WriteListener.getInstance());
}

View file

@ -6,6 +6,7 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import org.apache.log4j.Logger;
import org.mage.network.handlers.WriteListener;
import org.mage.network.model.PingMessage;
/**
@ -27,7 +28,7 @@ public class HeartbeatHandler extends ChannelHandlerAdapter {
ctx.channel().close();
logger.info("Disconnected due to extended idle");
} else if (e.state() == IdleState.WRITER_IDLE) {
ctx.writeAndFlush(ping);
ctx.writeAndFlush(ping).addListener(WriteListener.getInstance());
logger.info("Sending ping");
}
}

View file

@ -1,41 +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.ChatMessageRequest;
import org.mage.network.model.ChatRequest;
import org.mage.network.model.ChatRoomIdMessage;
import org.mage.network.model.ChatRoomIdRequest;
import org.mage.network.model.JoinChatRequest;
import org.mage.network.model.LeaveChatRequest;
/**
*
* @author BetaSteward
*/
@Sharable
public class ChatMessageHandler extends SimpleChannelInboundHandler<ChatRequest> {
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());
}
}
}

View file

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

View file

@ -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<RegisterClientRequest> {
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);
}
}

View file

@ -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<RoomRequest> {
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())));
}
}
}

View file

@ -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<ServerMessagesRequest> {
private final MageServer server;
public ServerMessageHandler (MageServer server) {
this.server = server;
}
@Override
public void messageReceived(ChannelHandlerContext ctx, ServerMessagesRequest msg) {
ctx.writeAndFlush(new ServerMessagesMessage(server.getServerMessages()));
}
}

View file

@ -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<ServerRequest> {
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);
}
}

View file

@ -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<TableRequest> {
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());
}
}
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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