diff --git a/nge.cfg b/nge.cfg index e13049f71..a584b2545 100644 --- a/nge.cfg +++ b/nge.cfg @@ -1,19 +1,18 @@ -#Thu May 21 00:05:03 CDT 2015 -LOGIN-SERVER-NAME=LoginServer +#Thu May 21 23:36:44 CDT 2015 +CLEAN-CHARACTER-DATA=0 LOAD-BUILDOUTS=false LOCAL-USER=nge -LOGIN-SERVER-ID=1 -LOAD-BUILDOUTS-FOR= -GALAXY-MAX-ONLINE=3000 -LOCAL-PASS=nge -PACKET-DEBUG=true +LOGIN-SERVER-NAME=LoginServer AUTO-LOGIN=0 -CLEAN-CHARACTER-DATA=0 SESSION-TOKEN-LENGTH=24 -MAX-PACKET-SIZE=496 -GALAXY-MAX-CHARACTERS=2 -WIPE-ODB-FILES=0 LOGIN-PORT=44453 -ZONE-SERVER-ID=1 -ZONE-SERVER-NAME=ZoneServer +PACKET-DEBUG=false LOCAL-DB=nge +MAX-PACKET-SIZE=496 +DEBUG-SERVICES=true +LOCAL-PASS=nge +WIPE-ODB-FILES=0 +LOGIN-SERVER-ID=1 +GALAXY-MAX-ONLINE=3000 +GALAXY-MAX-CHARACTERS=2 +LOGIN-VERSION-CHECKS=true diff --git a/src/resources/control/Service.java b/src/resources/control/Service.java index de5c0fa52..88285af45 100644 --- a/src/resources/control/Service.java +++ b/src/resources/control/Service.java @@ -27,6 +27,9 @@ ***********************************************************************************/ package resources.control; +import java.text.DateFormat; +import java.text.SimpleDateFormat; + import network.OutboundPacketService; import network.packets.Packet; import resources.config.ConfigFile; @@ -42,6 +45,7 @@ import resources.services.Config; public class Service implements IntentReceiver { private static final OutboundPacketService outboundPacketService = new OutboundPacketService(); + private static final DateFormat LOG_FORMAT = new SimpleDateFormat("dd-mm-yy HH:mm:ss.SSS"); /** * Initializes this service. If the service returns false on this method @@ -160,6 +164,19 @@ public class Service implements IntentReceiver { return DataManager.getInstance().getLocalDatabase(); } - + /** + * Logs the string to the server log file, formatted to display the time, + * tag and message. + * @param tag the tag to use for the log + * @param str the format string for the log + * @param args the string format arguments, if specified + */ + public synchronized final void log(String tag, String str, Object ... args) { + if (getConfig(ConfigFile.PRIMARY).getBoolean("DEBUG-SERVICES", true)) { + String logStr = String.format(str, args); + String log = String.format("%s [%s]: %s", LOG_FORMAT.format(System.currentTimeMillis()), tag, logStr); + DataManager.getInstance().log(log); + } + } } diff --git a/src/resources/server_info/DataManager.java b/src/resources/server_info/DataManager.java index 8014e5bef..281b6230f 100644 --- a/src/resources/server_info/DataManager.java +++ b/src/resources/server_info/DataManager.java @@ -42,6 +42,7 @@ public class DataManager { private Map config; private RelationalDatabase localDatabase; + private Logger logger; private boolean initialized; private DataManager() { @@ -51,6 +52,7 @@ public class DataManager { private synchronized void initialize() { initializeConfig(); initializeDatabases(); + initializeLogger(); initialized = localDatabase.isOnline() && localDatabase.isTable("users"); } @@ -75,6 +77,15 @@ public class DataManager { initializeLocalDatabase(c); } + private synchronized void initializeLogger() { + logger = new Logger("log.txt"); + try { + logger.open(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private synchronized void initializeLocalDatabase(Config c) { String db = c.getString("LOCAL-DB", "nge"); String user = c.getString("LOCAL-USER", "nge"); @@ -104,6 +115,14 @@ public class DataManager { return localDatabase; } + public synchronized final void log(String str) { + try { + logger.write(str); + } catch (IOException e) { + e.printStackTrace(); + } + } + public synchronized final boolean isInitialized() { return initialized; } diff --git a/src/resources/server_info/Logger.java b/src/resources/server_info/Logger.java new file mode 100644 index 000000000..b550e1051 --- /dev/null +++ b/src/resources/server_info/Logger.java @@ -0,0 +1,31 @@ +package resources.server_info; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +public class Logger { + + private final File file; + private BufferedWriter writer; + + public Logger(String filename) { + this.file = new File(filename); + } + + public synchronized void open() throws IOException { + writer = new BufferedWriter(new FileWriter(file)); + } + + public synchronized void close() throws IOException { + writer.close(); + } + + public synchronized void write(String str) throws IOException { + writer.write(str); + writer.newLine(); + writer.flush(); + } + +} diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 2048c347a..bc3cc63a3 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -98,6 +98,7 @@ public class ObjectManager extends Manager { private void loadObjects() { long startLoad = System.nanoTime(); + log("ObjectManager", "Loading objects from ObjectDatabase..."); System.out.println("ObjectManager: Loading objects from ObjectDatabase..."); objects.load(); objects.traverse(new Traverser() { @@ -110,6 +111,7 @@ public class ObjectManager extends Manager { } }); double loadTime = (System.nanoTime() - startLoad) / 1E6; + log("ObjectManager", "Finished loading %d objects. Time: %fms", objects.size(), loadTime); System.out.printf("ObjectManager: Finished loading %d objects. Time: %fms%n", objects.size(), loadTime); } @@ -133,6 +135,7 @@ public class ObjectManager extends Manager { double loadTime = (System.nanoTime() - startLoad) / 1E6; System.out.printf("ObjectManager: Finished loading buildouts. Time: %fms%n", loadTime); } else { + log("ObjectManager", "Did not load buildouts. Reason: Disabled."); System.out.println("ObjectManager: Buildouts not loaded. Reason: Disabled!"); } }