package server; import database.DatabaseConnection; import handling.cashshop.CashShopServer; import handling.channel.ChannelServer; import handling.login.LoginServer; import handling.world.World; import handling.world.World.Alliance; import handling.world.World.Broadcast; import handling.world.World.Family; import handling.world.World.Guild; import java.io.PrintStream; import java.lang.management.ManagementFactory; import java.sql.SQLException; import java.util.Set; import javax.management.MBeanServer; import javax.management.ObjectName; import tools.packet.CWvsContext; public class ShutdownServer implements ShutdownServerMBean { public static ShutdownServer instance; public int mode = 0; public static void registerMBean() { MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); try { instance = new ShutdownServer(); mBeanServer.registerMBean(instance, new ObjectName("server:type=ShutdownServer")); } catch (Exception e) { System.out.println("Error registering Shutdown MBean"); e.printStackTrace(); } } public static ShutdownServer getInstance() { return instance; } public void shutdown() { run(); } public void run() { if (this.mode == 0) { int ret = 0; World.Broadcast.broadcastMessage(CWvsContext.serverNotice(0, "The world is going to shutdown soon. Please log off safely.")); for (ChannelServer cs : ChannelServer.getAllInstances()) { cs.setShutdown(); cs.setServerMessage("The world is going to shutdown soon. Please log off safely."); ret += cs.closeAllMerchant(); } World.Guild.save(); World.Alliance.save(); World.Family.save(); System.out.println("Shutdown 1 has completed. Hired merchants saved: " + ret); this.mode += 1; } else if (this.mode == 1) { this.mode += 1; System.out.println("Shutdown 2 commencing..."); try { World.Broadcast.broadcastMessage(CWvsContext.serverNotice(0, "The world is going to shutdown now. Please log off safely.")); Integer[] chs = (Integer[]) ChannelServer.getAllInstance().toArray(new Integer[0]); Integer[] arr$ = chs; int len$ = arr$.length; for (int i$ = 0; i$ < len$; i$++) { int i = arr$[i$].intValue(); try { ChannelServer cs = ChannelServer.getInstance(i); synchronized (this) { cs.shutdown(); } } catch (Exception e) { e.printStackTrace(); } } LoginServer.shutdown(); CashShopServer.shutdown(); DatabaseConnection.closeAll(); } catch (SQLException e) { System.err.println("THROW" + e); } Timer.WorldTimer.getInstance().stop(); Timer.MapTimer.getInstance().stop(); Timer.BuffTimer.getInstance().stop(); Timer.CloneTimer.getInstance().stop(); Timer.EventTimer.getInstance().stop(); Timer.EtcTimer.getInstance().stop(); Timer.PingTimer.getInstance().stop(); System.out.println("Shutdown 2 has finished."); try { Thread.sleep(5000L); } catch (Exception e) { } System.exit(0); } } }