From 435cafd381cbdc9d55dcdb9f09029cad6d6628c2 Mon Sep 17 00:00:00 2001 From: P0nk Date: Sun, 18 Jul 2021 16:27:41 +0200 Subject: [PATCH] Refactor MapleClient constructor, fix issue with multiclient check --- src/main/java/client/MapleClient.java | 24 ++++++++++++------- .../net/netty/ChannelServerInitializer.java | 5 ++-- .../net/netty/LoginServerInitializer.java | 5 ++-- .../net/netty/ServerChannelInitializer.java | 20 ++++++++++++++++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index ec8643cd04..582dd99758 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -88,13 +88,14 @@ public class MapleClient extends ChannelInboundHandlerAdapter { public static final int LOGIN_LOGGEDIN = 2; private final Type type; + private final long sessionId; + private final PacketProcessor packetProcessor; private Hwid hwid; private String remoteAddress; private volatile boolean inTransition; private io.netty.channel.Channel ioChannel; - private PacketProcessor packetProcessor; private MapleCharacter player; private int channel = 1; private int accId = -4; @@ -126,7 +127,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { private int voteTime = -1; private int visibleWorlds; private long lastNpcClick; - private long sessionId; private long lastPacket = System.currentTimeMillis(); private int lang = 0; @@ -135,15 +135,27 @@ public class MapleClient extends ChannelInboundHandlerAdapter { CHANNEL } - public MapleClient(Type type, PacketProcessor packetProcessor, int world, int channel) { + public MapleClient(Type type, long sessionId, String remoteAddress, PacketProcessor packetProcessor, int world, int channel) { this.type = type; + this.sessionId = sessionId; + this.remoteAddress = remoteAddress; this.packetProcessor = packetProcessor; this.world = world; this.channel = channel; } + public static MapleClient createLoginClient(long sessionId, String remoteAddress, PacketProcessor packetProcessor, + int world, int channel) { + return new MapleClient(Type.LOGIN, sessionId, remoteAddress, packetProcessor, world, channel); + } + + public static MapleClient createChannelClient(long sessionId, String remoteAddress, PacketProcessor packetProcessor, + int world, int channel) { + return new MapleClient(Type.CHANNEL, sessionId, remoteAddress, packetProcessor, world, channel); + } + public static MapleClient createMock() { - return new MapleClient(null, null, -123, -123); + return new MapleClient(null, -1,null, null, -123, -123); } @Override @@ -1528,10 +1540,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { return this.sessionId; } - public void setSessionId(long sessionId) { - this.sessionId = sessionId; - } - public boolean canRequestCharlist() { return lastNpcClick + 877 < Server.getInstance().getCurrentTime(); } diff --git a/src/main/java/net/netty/ChannelServerInitializer.java b/src/main/java/net/netty/ChannelServerInitializer.java index 78be6e0ed9..13f3aff181 100644 --- a/src/main/java/net/netty/ChannelServerInitializer.java +++ b/src/main/java/net/netty/ChannelServerInitializer.java @@ -25,8 +25,9 @@ public class ChannelServerInitializer extends ServerChannelInitializer { log.debug("Client connecting to world {}, channel {} from {}", world, channel, clientIp); PacketProcessor packetProcessor = PacketProcessor.getChannelServerProcessor(world, channel); - final MapleClient client = new MapleClient(MapleClient.Type.CHANNEL, packetProcessor, world, channel); - client.setSessionId(sessionId.getAndIncrement()); + final long clientSessionId = sessionId.getAndIncrement(); + final String remoteAddress = getRemoteAddress(socketChannel); + final MapleClient client = MapleClient.createChannelClient(clientSessionId, remoteAddress, packetProcessor, world, channel); if (Server.getInstance().getChannel(world, channel) == null) { MapleSessionCoordinator.getInstance().closeSession(client, true); diff --git a/src/main/java/net/netty/LoginServerInitializer.java b/src/main/java/net/netty/LoginServerInitializer.java index 1d9795e011..5294e5ead1 100644 --- a/src/main/java/net/netty/LoginServerInitializer.java +++ b/src/main/java/net/netty/LoginServerInitializer.java @@ -16,8 +16,9 @@ public class LoginServerInitializer extends ServerChannelInitializer { log.debug("Client connected to login server from {} ", clientIp); PacketProcessor packetProcessor = PacketProcessor.getLoginServerProcessor(); - final MapleClient client = new MapleClient(MapleClient.Type.LOGIN, packetProcessor, LoginServer.WORLD_ID, LoginServer.CHANNEL_ID); - client.setSessionId(sessionId.getAndIncrement()); + final long clientSessionId = sessionId.getAndIncrement(); + final String remoteAddress = getRemoteAddress(socketChannel); + final MapleClient client = MapleClient.createLoginClient(clientSessionId, remoteAddress, packetProcessor, LoginServer.WORLD_ID, LoginServer.CHANNEL_ID); if (!MapleSessionCoordinator.getInstance().canStartLoginSession(client)) { socketChannel.close(); diff --git a/src/main/java/net/netty/ServerChannelInitializer.java b/src/main/java/net/netty/ServerChannelInitializer.java index 9d9f0c6e78..9e520f593d 100644 --- a/src/main/java/net/netty/ServerChannelInitializer.java +++ b/src/main/java/net/netty/ServerChannelInitializer.java @@ -4,6 +4,7 @@ import client.MapleClient; import config.YamlConfig; import constants.net.ServerConstants; import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; @@ -14,11 +15,16 @@ import net.encryption.InitializationVector; import net.encryption.PacketCodec; import net.packet.logging.InPacketLogger; import net.packet.logging.OutPacketLogger; +import net.server.coordinator.session.IpAddresses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.MaplePacketCreator; +import java.net.InetSocketAddress; import java.util.concurrent.atomic.AtomicLong; public abstract class ServerChannelInitializer extends ChannelInitializer { + private static final Logger log = LoggerFactory.getLogger(ServerChannelInitializer.class); private static final int IDLE_TIME_SECONDS = 30; private static final boolean LOG_PACKETS = YamlConfig.config.server.USE_DEBUG_SHOW_PACKET; private static final ChannelHandler sendPacketLogger = new OutPacketLogger(); @@ -26,6 +32,20 @@ public abstract class ServerChannelInitializer extends ChannelInitializer