Add a config option for specifying kcp connection timeout

This commit is contained in:
Melledy
2024-03-24 21:28:21 -07:00
parent bb4342560a
commit 2b5180a651
3 changed files with 15 additions and 2 deletions

View File

@@ -102,10 +102,15 @@ public class Config {
public String name = "Lunar Core"; public String name = "Lunar Core";
public String description = "A LunarCore server"; public String description = "A LunarCore server";
public int kcpInterval = 40; public int kcpInterval = 40;
public Integer kcpTimeout = 30;
public GameServerConfig(int port) { public GameServerConfig(int port) {
super(port); super(port);
} }
public int getKcpTimeout() {
return kcpTimeout.intValue();
}
} }
@Getter @Getter
@@ -197,4 +202,10 @@ public class Config {
public String ifixUrl = null; public String ifixUrl = null;
} }
public void validate() {
if (this.gameServer.kcpTimeout == null) {
this.gameServer.kcpTimeout = 30;
}
}
} }

View File

@@ -190,6 +190,8 @@ public class LunarCore {
// Sanity check // Sanity check
if (LunarCore.getConfig() == null) { if (LunarCore.getConfig() == null) {
LunarCore.config = new Config(); LunarCore.config = new Config();
} else {
LunarCore.getConfig().validate();
} }
// Save config // Save config

View File

@@ -152,11 +152,11 @@ public class GameServer extends KcpServer {
public void start() { public void start() {
// Setup config and init server // Setup config and init server
ChannelConfig channelConfig = new ChannelConfig(); ChannelConfig channelConfig = new ChannelConfig();
channelConfig.nodelay(true, this.getServerConfig().getKcpInterval(), 2, true); channelConfig.nodelay(true, getServerConfig().getKcpInterval(), 2, true);
channelConfig.setMtu(1400); channelConfig.setMtu(1400);
channelConfig.setSndwnd(256); channelConfig.setSndwnd(256);
channelConfig.setRcvwnd(256); channelConfig.setRcvwnd(256);
channelConfig.setTimeoutMillis(30 * 1000); // 30s channelConfig.setTimeoutMillis(getServerConfig().getKcpTimeout() * 1000);
channelConfig.setUseConvChannel(true); channelConfig.setUseConvChannel(true);
channelConfig.setAckNoDelay(true); channelConfig.setAckNoDelay(true);