From 9bbbcb7e9fc5bba233023431755cacb24280f01c Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 13 Feb 2025 18:28:55 +0100 Subject: [PATCH] =?UTF-8?q?pridan=C3=AD=20metody=20pro=20restart=20serveru?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/jnet/server/Server.java | 28 +++++++++++++++++++++++- src/jnet/server/ServerMessageParser.java | 15 ++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/jnet/server/Server.java b/src/jnet/server/Server.java index c9b16e5..0bdda30 100644 --- a/src/jnet/server/Server.java +++ b/src/jnet/server/Server.java @@ -1,5 +1,7 @@ package jnet.server; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import jnet.lib.BuilddDate; @@ -45,7 +47,6 @@ public class Server { } - LogWindow.addRow("tset"); LogFile.clear(); LogFile.setDebug(false); @@ -143,5 +144,30 @@ public class Server { np.start(); } + + public static void restartServer() { + new Thread(() -> { + try { + Thread.sleep(5000); + try { + String java = System.getProperty("java.home") + "/bin/java"; + File jarFile = new File(Server.class + .getProtectionDomain().getCodeSource().getLocation().getPath()); + + List command = new ArrayList<>(); + command.add(java); + command.add("-jar"); + command.add(jarFile.getAbsolutePath()); + + new ProcessBuilder(command).start(); + System.exit(0); + } catch (IOException ex) { + LogFile.printErr("Restart failed! " + ex.getMessage()); + } + } catch (InterruptedException e) { + LogFile.printErr("Restart failed! " + e.getMessage()); + } + }).start(); + } } diff --git a/src/jnet/server/ServerMessageParser.java b/src/jnet/server/ServerMessageParser.java index c2d3b1e..9d2886a 100644 --- a/src/jnet/server/ServerMessageParser.java +++ b/src/jnet/server/ServerMessageParser.java @@ -4,6 +4,7 @@ import io.netty.channel.Channel; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.util.concurrent.GlobalEventExecutor; +import java.lang.management.ManagementFactory; import java.net.InetSocketAddress; import java.util.ListIterator; import jnet.lib.LogFile; @@ -79,6 +80,7 @@ public class ServerMessageParser { sendAll(new Message(Message.ONLINE_CLIENTS, Server.onlineClients)); // odeslat nastaveni serveru ServerConfig sc = new ServerConfig( + Server.config.getInt("ping_repeat"), Server.config.getInt("ping_attempt"), Server.config.getInt("ping_timeout"), Server.config.getInt("instability_attempt"), @@ -109,6 +111,16 @@ public class ServerMessageParser { LogFile.printInfo("Authorization failed (ser: " + username + " )"); } break; + + case Message.RESTART: + LogFile.printInfo("Prijat pozadavek na restart serveru"); + Server.restartServer(); + break; + + case Message.UPTIME: + long uptime = ManagementFactory.getRuntimeMXBean().getUptime(); + send(Message.UPTIME, uptime); + break; case Message.NEW_OBJECT_TYPE: ObjectType not = (ObjectType) msg.getMsg(); @@ -136,7 +148,7 @@ public class ServerMessageParser { case Message.ADD_OBJECT: MapObject mo = Database.addMapObject((MapObject) msg.getMsg()); // pridat do seznamu - iteratorMapObject.add(mo); + Server.mapObject.add(mo); // odesle všem novy objekt sendAll(new Message(Message.ADD_OBJECT, mo)); // prida event a odesle ho @@ -273,6 +285,7 @@ public class ServerMessageParser { case Message.SERVER_CONFIG: ServerConfig sc = (ServerConfig) msg.getMsg(); // ulozeni + Server.config.setInt("ping_repeat", sc.getPingRepeat()); Server.config.setInt("ping_attempt", sc.getPingAttempt()); Server.config.setInt("ping_timeout", sc.getPingTimeout()); Server.config.setInt("instability_attempt", sc.getInstabilityAttempt());