From 0549a4b481d5b39a2473da15e3f4001e73524d6c Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Sat, 13 May 2017 21:43:43 -0700
Subject: [PATCH] restart command improvement

---
 .../java/com/comandante/creeper/Main.java     |  2 +-
 .../commands/admin/RestartCommand.java        | 19 ++-----------------
 .../creeper/core_game/GameManager.java        | 13 ++++++++-----
 .../core_game/service/TimeTracker.java        | 10 +++++-----
 .../combat_simuation/NpcTestHarness.java      |  2 +-
 5 files changed, 17 insertions(+), 29 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java
index 75bf9dea..f7ad94eb 100644
--- a/src/main/java/com/comandante/creeper/Main.java
+++ b/src/main/java/com/comandante/creeper/Main.java
@@ -99,7 +99,7 @@ public class Main {
         MapsManager mapsManager = new MapsManager(creeperConfiguration, roomManager);
         ChannelUtils channelUtils = new ChannelUtils(playerManager, roomManager);
         EntityManager entityManager = new EntityManager(mapDBCreeperStorage, roomManager, playerManager);
-        GameManager gameManager = new GameManager(creeperConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
+        GameManager gameManager = new GameManager(mapDBCreeperStorage, creeperConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
 
         startUpMessage("Reading world from disk.");
         WorldStorage worldExporter = new WorldStorage(roomManager, mapsManager, gameManager.getFloorManager(), entityManager, gameManager);
diff --git a/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java b/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java
index 3d7bc959..6743b3d0 100644
--- a/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java
+++ b/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java
@@ -1,6 +1,5 @@
 package com.comandante.creeper.command.commands.admin;
 
-import com.comandante.creeper.Main;
 import com.comandante.creeper.command.commands.Command;
 import com.comandante.creeper.core_game.GameManager;
 import com.comandante.creeper.player.PlayerRole;
@@ -8,15 +7,10 @@ import com.google.common.collect.Sets;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.MessageEvent;
 
-import java.io.File;
-import java.lang.management.ManagementFactory;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
-/**
- * Created by chrisk on 5/13/17.
- */
 public class RestartCommand extends Command {
 
 
@@ -33,17 +27,8 @@ public class RestartCommand extends Command {
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
         execCommandThreadSafe(ctx, e, BounceIrcBotCommand.class, () -> {
-            StringBuilder cmd = new StringBuilder();
-            cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java ");
-            for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
-                cmd.append(jvmArg + " ");
-            }
-            cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" ");
-            cmd.append(Main.class.getName()).append(" ");
-//            for (String arg : args) {
-//                cmd.append(arg).append(" ");
-//            }
-            Runtime.getRuntime().exec(cmd.toString() + " server.config");
+            gameManager.getMapDBCreeperStorage().stopAsync();
+            gameManager.getMapDBCreeperStorage().awaitTerminated();
             System.exit(0);
         });
     }
diff --git a/src/main/java/com/comandante/creeper/core_game/GameManager.java b/src/main/java/com/comandante/creeper/core_game/GameManager.java
index 6fb4ea6b..0e3c3b34 100644
--- a/src/main/java/com/comandante/creeper/core_game/GameManager.java
+++ b/src/main/java/com/comandante/creeper/core_game/GameManager.java
@@ -26,10 +26,7 @@ import com.comandante.creeper.stats.Levels;
 import com.comandante.creeper.stats.Stats;
 import com.comandante.creeper.stats.StatsBuilder;
 import com.comandante.creeper.stats.modifier.StatsModifierFactory;
-import com.comandante.creeper.storage.FilebasedJsonStorage;
-import com.comandante.creeper.storage.ItemStorage;
-import com.comandante.creeper.storage.MerchantStorage;
-import com.comandante.creeper.storage.NpcStorage;
+import com.comandante.creeper.storage.*;
 import com.comandante.creeper.world.FloorManager;
 import com.comandante.creeper.world.MapsManager;
 import com.comandante.creeper.world.RoomManager;
@@ -92,6 +89,7 @@ public class GameManager {
     private final HttpClient httpclient;
     private final Gson gson;
     private final FilebasedJsonStorage filebasedJsonStorage;
+    private final MapDBCreeperStorage mapDBCreeperStorage;
 
     public MerchantStorage getMerchantStorage() {
         return merchantStorage;
@@ -100,7 +98,8 @@ public class GameManager {
     private final MerchantStorage merchantStorage;
 
 
-    public GameManager(CreeperConfiguration creeperConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils, HttpClient httpClient) {
+    public GameManager(MapDBCreeperStorage mapDBCreeperStorage, CreeperConfiguration creeperConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils, HttpClient httpClient) {
+        this.mapDBCreeperStorage = mapDBCreeperStorage;
         this.roomManager = roomManager;
         this.playerManager = playerManager;
         this.entityManager = entityManager;
@@ -135,6 +134,10 @@ public class GameManager {
         this.httpclient = httpClient;
     }
 
+    public MapDBCreeperStorage getMapDBCreeperStorage() {
+        return mapDBCreeperStorage;
+    }
+
     public Gson getGson() {
         return gson;
     }
diff --git a/src/main/java/com/comandante/creeper/core_game/service/TimeTracker.java b/src/main/java/com/comandante/creeper/core_game/service/TimeTracker.java
index 66b9601c..95f4dc82 100644
--- a/src/main/java/com/comandante/creeper/core_game/service/TimeTracker.java
+++ b/src/main/java/com/comandante/creeper/core_game/service/TimeTracker.java
@@ -23,11 +23,11 @@ public class TimeTracker extends CreeperEntity {
 
     @Override
     public void run() {
-        TimeOfDay timeOfDay = determineTimeOfDay();
-        if (timeOfDay != currentTimeOfDay) {
-            announceChange(timeOfDay);
-        }
-        currentTimeOfDay = timeOfDay;
+             TimeOfDay timeOfDay = determineTimeOfDay();
+             if (timeOfDay != currentTimeOfDay) {
+                 announceChange(timeOfDay);
+             }
+             currentTimeOfDay = timeOfDay;
     }
 
     private void announceChange(TimeOfDay timeOfDay) {
diff --git a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
index 4d0df8fa..ae2ec5ae 100644
--- a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
+++ b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
@@ -307,7 +307,7 @@ public class NpcTestHarness {
         RoomManager roomManager = new RoomManager(playerManager);
         MapsManager mapsManager = new MapsManager(creeperConfiguration, roomManager);
         EntityManager entityManager = new EntityManager(mapDBCreeperStorage, roomManager, playerManager);
-        GameManager gameManager = new GameManager(creeperConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
+        GameManager gameManager = new GameManager(null, creeperConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
         WorldStorage worldExporter = new WorldStorage(roomManager, mapsManager, gameManager.getFloorManager(), entityManager, gameManager);
         worldExporter.buildTestworld();
         ConfigureCommands.configure(gameManager);
-- 
GitLab