Disconnect client by throwing exception in handler

This makes it easier to add checks in handlers, which should improve security over time.
I think this approach is more readable and testable than calling Client#disconnect straight up,
while it also decentralizes the handling.
This commit is contained in:
P0nk
2023-08-06 15:48:49 +02:00
parent e9819fac87
commit 2686b2b02d
36 changed files with 180 additions and 106 deletions

View File

@@ -367,7 +367,7 @@ public class Server {
wldRLock.unlock();
}
Channel channel = new Channel(worldid, channelid, getCurrentTime(), channelDependencies.dropProvider());
Channel channel = new Channel(worldid, channelid, getCurrentTime(), channelDependencies);
channel.setServerMessage(YamlConfig.config.worlds.get(worldid).why_am_i_recommended);
if (world.addChannel(channel)) {
@@ -440,7 +440,7 @@ public class Server {
long bootTime = getCurrentTime();
for (int j = 1; j <= YamlConfig.config.worlds.get(i).channels; j++) {
int channelid = j;
Channel channel = new Channel(i, channelid, bootTime, channelDependencies.dropProvider());
Channel channel = new Channel(i, channelid, bootTime, channelDependencies);
world.addChannel(channel);
channelInfo.put(channelid, channel.getIP());
@@ -928,7 +928,7 @@ public class Server {
}
}
loginServer = initLoginServer(8484);
loginServer = initLoginServer(8484, channelDependencies.characterSaver());
log.info("Listening on port 8484");
@@ -999,8 +999,8 @@ public class Server {
return channelDependencies;
}
private LoginServer initLoginServer(int port) {
LoginServer loginServer = new LoginServer(port);
private LoginServer initLoginServer(int port, CharacterSaver characterSaver) {
LoginServer loginServer = new LoginServer(port, characterSaver);
loginServer.start();
return loginServer;
}