Move some remaining bits and pieces to netty implementation, start cleaning up

This commit is contained in:
P0nk
2021-07-13 21:54:07 +02:00
parent fc694f1b0f
commit 94e1125eca
8 changed files with 64 additions and 389 deletions

View File

@@ -35,8 +35,6 @@ import constants.game.GameConstants;
import constants.inventory.ItemConstants;
import constants.net.OpcodeConstants;
import constants.net.ServerConstants;
import net.MapleServerHandler;
import net.mina.MapleCodecFactory;
import net.netty.LoginServer;
import net.server.audit.ThreadTracker;
import net.server.audit.locks.MonitoredLockType;
@@ -54,12 +52,6 @@ import net.server.guild.MapleGuild;
import net.server.guild.MapleGuildCharacter;
import net.server.task.*;
import net.server.world.World;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import server.CashShop.CashItemFactory;
@@ -74,8 +66,6 @@ import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.Pair;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.security.Security;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -106,7 +96,6 @@ public class Server {
private static final Map<Integer, Integer> couponRates = new HashMap<>(30);
private static final List<Integer> activeCoupons = new LinkedList<>();
private IoAcceptor acceptor;
private LoginServer loginServer;
private List<Map<Integer, String>> channels = new LinkedList<>();
private List<World> worlds = new ArrayList<>();
@@ -931,22 +920,6 @@ public class Server {
return loginServer;
}
private IoAcceptor initAcceptor(int port) {
IoBuffer.setUseDirectBuffer(false); // join IO operations performed by lxconan
IoBuffer.setAllocator(new SimpleBufferAllocator());
acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MapleCodecFactory()));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
acceptor.setHandler(new MapleServerHandler());
try {
acceptor.bind(new InetSocketAddress(port));
} catch (IOException ex) {
ex.printStackTrace();
}
return acceptor;
}
private static void setAllLoggedOut(Connection con) throws SQLException {
try (PreparedStatement ps = con.prepareStatement("UPDATE accounts SET loggedin = 0")) {
ps.executeUpdate();
@@ -1958,8 +1931,7 @@ public class Server {
TimerManager.getInstance().stop();
System.out.println("Worlds + Channels are offline.");
acceptor.unbind();
acceptor = null;
loginServer.stop();
if (!restart) { // shutdown hook deadlocks if System.exit() method is used within its body chores, thanks MIKE for pointing that out
new Thread(() -> System.exit(0)).start();
} else {

View File

@@ -24,8 +24,6 @@ package net.server.channel;
import client.MapleCharacter;
import config.YamlConfig;
import constants.game.GameConstants;
import net.MapleServerHandler;
import net.mina.MapleCodecFactory;
import net.netty.ChannelServer;
import net.server.PlayerStorage;
import net.server.Server;
@@ -40,13 +38,6 @@ import net.server.services.type.ChannelServices;
import net.server.world.MapleParty;
import net.server.world.MaplePartyCharacter;
import net.server.world.World;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import scripting.event.EventScriptManager;
@@ -59,21 +50,22 @@ import tools.MaplePacketCreator;
import tools.Pair;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
public final class Channel {
private static final Logger log = LoggerFactory.getLogger(Channel.class);
private static final int BASE_PORT = 7575;
private final int port;
private final String ip;
private final int world;
private final int channel;
private int port = 7575;
private PlayerStorage players = new PlayerStorage();
private int world, channel;
private ChannelServer channelServer;
private IoAcceptor acceptor;
private String ip, serverMessage;
private String serverMessage;
private MapleMapManager mapManager;
private EventScriptManager eventSM;
private ServicesManager services;
@@ -121,12 +113,11 @@ public final class Channel {
this.ongoingStartTime = startTime + 10000; // rude approach to a world's last channel boot time, placeholder for the 1st wedding reservation ever
this.mapManager = new MapleMapManager(null, world, channel);
this.port = BASE_PORT + (this.channel - 1) + (world * 100);
this.ip = YamlConfig.config.server.HOST + ":" + port;
try {
port = 7575 + this.channel - 1;
port += (world * 100);
ip = YamlConfig.config.server.HOST + ":" + port;
// acceptor = initAcceptor();
channelServer = initServer(port, world, channel);
this.channelServer = initServer(port, world, channel);
expedType.addAll(Arrays.asList(MapleExpeditionType.values()));
if (Server.getInstance().isOnline()) { // postpone event loading to improve boot time... thanks Riizade, daronhudson for noticing slow startup times
@@ -150,24 +141,12 @@ public final class Channel {
log.info("Channel {}: Listening on port {}", getId(), port);
} catch (Exception e) {
e.printStackTrace();
log.warn("Error during channel initialization", e);
}
}
private IoAcceptor initAcceptor() throws IOException {
IoBuffer.setUseDirectBuffer(false);
IoBuffer.setAllocator(new SimpleBufferAllocator());
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new MapleServerHandler(world, channel));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MapleCodecFactory()));
acceptor.bind(new InetSocketAddress(port));
((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(true);
return acceptor;
}
private ChannelServer initServer(int port, int world, int channel) {
this.channelServer = new ChannelServer(port, world, channel);
ChannelServer channelServer = new ChannelServer(port, world, channel);
channelServer.start();
return channelServer;
}
@@ -202,10 +181,8 @@ public final class Channel {
closeChannelSchedules();
players = null;
MapleServerHandler handler = (MapleServerHandler) acceptor.getHandler();
handler.dispose();
acceptor.unbind();
channelServer.stop();
finishedShutdown = true;
System.out.println("Successfully shut down Channel " + channel + " on World " + world + "\r\n");

View File

@@ -295,7 +295,7 @@ public class MapleSessionCoordinator {
client.setHwid(Hwid.fromClientString(remoteHwid));
}
MapleClient fakeClient = new MapleClient(null, null, null);
MapleClient fakeClient = MapleClient.createMock();
Integer chrId = Server.getInstance().freeCharacteridInTransition(client);
if (chrId != null) {
try {
@@ -313,15 +313,14 @@ public class MapleSessionCoordinator {
client = fetchInTransitionSessionClient(client);
}
Hwid hwid = client.getHwid();
final Hwid hwid = client.getHwid();
client.setHwid(null); // making sure to clean up calls to this function on login phase
if (hwid != null) {
onlineRemoteHwids.remove(hwid.hwid());
}
String remoteHwid = client.getRemoteHwid();
final String remoteHwid = client.getRemoteHwid();
client.setRemoteHwid(null);
// TODO: client.setHwid(null);
if (remoteHwid != null) {
onlineRemoteHwids.remove(remoteHwid);
}