From 127ebc242efd547a06271aceea8813fa31f4e028 Mon Sep 17 00:00:00 2001 From: ceikry Date: Tue, 13 Jul 2021 21:12:07 -0500 Subject: [PATCH] Fixed a critical bug with the Management Server (no more lockouts weeee) --- Management-Server/build.gradle | 8 +++- .../src/main/java/ms/net/IoEventHandler.java | 7 +++- .../java/ms/net/event/RegistryReadEvent.java | 1 - .../src/main/java/ms/world/WorldDatabase.java | 19 +++++++++- .../src/main/kotlin/ms09/MSLogger.kt | 37 +++++++++++++++++++ .../core/game/system/SystemTermination.java | 2 - 6 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 Management-Server/src/main/kotlin/ms09/MSLogger.kt diff --git a/Management-Server/build.gradle b/Management-Server/build.gradle index 797b2b7d4..9ce79718b 100644 --- a/Management-Server/build.gradle +++ b/Management-Server/build.gradle @@ -4,11 +4,17 @@ archivesBaseName = 'managementserver' mainClassName = 'ms.Management' +repositories { + mavenCentral() +} + dependencies { - implementation 'com.google.guava:guava:29.0-jre' + implementation "com.github.ajalt.mordant:mordant:2.0.0-alpha2" + implementation "org.jetbrains:markdown-jvm:0.2.0" implementation 'mysql:mysql-connector-java:8.0.21' } + jar { manifest { attributes 'Main-Class': 'ms.Management' diff --git a/Management-Server/src/main/java/ms/net/IoEventHandler.java b/Management-Server/src/main/java/ms/net/IoEventHandler.java index 22fbfd2c9..3139ae044 100644 --- a/Management-Server/src/main/java/ms/net/IoEventHandler.java +++ b/Management-Server/src/main/java/ms/net/IoEventHandler.java @@ -1,5 +1,7 @@ package ms.net; +import ms.world.WorldDatabase; + import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.ClosedChannelException; @@ -8,6 +10,7 @@ import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; +import java.util.Arrays; import java.util.concurrent.ExecutorService; /** @@ -63,7 +66,9 @@ public final class IoEventHandler { ByteBuffer buffer = ByteBuffer.allocate(100_000); IoSession session = (IoSession) key.attachment(); if (channel.read(buffer) == -1) { - System.out.println("Existing session disconnected - likely portscanner or server status checker."); + if(session.getGameServer() != null){ + WorldDatabase.unRegister(session.getGameServer()); + } key.cancel(); return; } diff --git a/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java b/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java index 3ca964cf7..f906ab213 100644 --- a/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java +++ b/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java @@ -47,7 +47,6 @@ public final class RegistryReadEvent extends IoReadEvent { boolean quickChat = buffer.get() == 1; boolean lootshare = buffer.get() == 1; String activity = ByteBufferUtils.getString(buffer); - System.out.println("["+ revision + "], country = " + country + ", members = " + members + ", pvp = " + pvp + ", quickChat = " + quickChat + ", lootShare = " + lootshare + ", activity = " + activity); for (int i = 0; i < CHECK.length(); i++) { if ((char) buffer.get() != CHECK.charAt(i)) { session.write(3); diff --git a/Management-Server/src/main/java/ms/world/WorldDatabase.java b/Management-Server/src/main/java/ms/world/WorldDatabase.java index 00d5b1450..6df1e48fc 100644 --- a/Management-Server/src/main/java/ms/world/WorldDatabase.java +++ b/Management-Server/src/main/java/ms/world/WorldDatabase.java @@ -7,6 +7,7 @@ import ms.net.IoSession; import ms.net.packet.IoBuffer; import ms.world.info.CountryFlag; import ms.world.info.WorldInfo; +import ms09.MSLogger; /** * Holds all the world servers. @@ -148,9 +149,25 @@ public class WorldDatabase { throw new IllegalStateException("World " + info.getWorldId() + " is already registered!"); } flagUpdate(); - System.out.println("Registered world - [id=" + info.getWorldId() + ", ip=" + info.getAddress() + ", country=" + info.getCountry().name().toLowerCase() + ", revision=" + info.getRevision() + "]!"); + MSLogger.logInfo("Registered world - [id=" + info.getWorldId() + ", ip=" + info.getAddress() + ", country=" + info.getCountry().name().toLowerCase() + ", revision=" + info.getRevision() + "]!"); return DATABASE[info.getWorldId()] = new GameServer(info); } + + public static void unRegister(GameServer server){ + int index = -1; + for(int i = 0; i < DATABASE.length; i++){ + GameServer s = DATABASE[i]; + if(s == server){ + index = i; + break; + } + } + if(index != -1){ + DATABASE[index] = null; + WorldInfo info = server.getInfo(); + MSLogger.logInfo("Unregistered world - [id=" + info.getWorldId() + ", ip=" + info.getAddress() + ", country=" + info.getCountry().name().toLowerCase() + ", revision=" + info.getRevision() + "]!"); + } + } /** * Gets the world id of the player. diff --git a/Management-Server/src/main/kotlin/ms09/MSLogger.kt b/Management-Server/src/main/kotlin/ms09/MSLogger.kt new file mode 100644 index 000000000..b629b1595 --- /dev/null +++ b/Management-Server/src/main/kotlin/ms09/MSLogger.kt @@ -0,0 +1,37 @@ +package ms09 + +import com.github.ajalt.mordant.rendering.TextColors +import com.github.ajalt.mordant.terminal.Terminal +import java.io.BufferedWriter +import java.io.Writer +import java.text.SimpleDateFormat +import java.util.* + +object MSLogger { + val t = Terminal() + val formatter = SimpleDateFormat("HH:mm:ss") + var tradeLog: Writer? = null + var tradeLogWriter: BufferedWriter? = null + + + fun getTime(): String{ + return "[" + formatter.format(Date(System.currentTimeMillis())) +"]" + } + + @JvmStatic + fun logInfo(vararg messages: String){ + for(m in messages){ + if(m.isNotBlank()) t.println("${getTime()}: [INFO] $m") + } + } + + @JvmStatic + fun logErr(message: String){ + if(message.isNotBlank()) t.println("${getTime()}: ${TextColors.brightRed("[ ERR] $message")}") + } + + @JvmStatic + fun logWarn(message: String){ + if(message.isNotBlank()) t.println("${getTime()}: ${TextColors.yellow("[WARN] $message")}") + } +} \ No newline at end of file diff --git a/Server/src/main/java/core/game/system/SystemTermination.java b/Server/src/main/java/core/game/system/SystemTermination.java index 26b936897..012d2f99d 100644 --- a/Server/src/main/java/core/game/system/SystemTermination.java +++ b/Server/src/main/java/core/game/system/SystemTermination.java @@ -45,8 +45,6 @@ public final class SystemTermination { e.printStackTrace(); } SystemLogger.logInfo("[SystemTerminator] Server successfully terminated!"); - Runtime.getRuntime().removeShutdownHook(ServerConstants.SHUTDOWN_HOOK); - System.exit(0); } /**