From 8dba2bfb8817be40c45a36b1842c728aa66716e9 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 8 Mar 2015 04:34:03 +0100
Subject: [PATCH] Server/py: Only save game world every 15 seconds.

---
 plomrogue-server.py | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/plomrogue-server.py b/plomrogue-server.py
index 4cc1dea..67210ca 100755
--- a/plomrogue-server.py
+++ b/plomrogue-server.py
@@ -79,6 +79,7 @@ def setup_server_io():
         if os.access(path_tmp, os.F_OK):
             raise SystemExit(msg)
     io_db["teststring"] = str(os.getpid()) + " " + str(time.time())
+    io_db["save_wait"] = 0
     os.makedirs(io_db["path_server"], exist_ok=True)
     io_db["file_out"] = open(io_db["path_out"], "w")
     strong_write(io_db["file_out"], io_db["teststring"] + "\n")
@@ -113,9 +114,10 @@ def obey(command, prefix, replay=False, do_record=False):
     a non-meta command from the commands_db merely triggers obey() on the next
     command from the records file. If not, non-meta commands set
     io_db["worldstate_updateable"] to world_db["WORLD_EXISTS"], and, if
-    do_record is set, are recorded via record(), and save_world() is called.
-    The prefix string is inserted into the server's input message between its
-    beginning 'input ' & ':'. All activity is preceded by a server_test() call.
+    do_record is set, are recorded via record(), and save_world() is called if
+    15 seconds have passed since the last time it was called. The prefix string
+    is inserted into the server's input message between its beginning 'input '
+    & ':'. All activity is preceded by a server_test() call.
     """
     server_test()
     print("input " + prefix + ": " + command)
@@ -141,7 +143,9 @@ def obey(command, prefix, replay=False, do_record=False):
             commands_db[tokens[0]][2](*tokens[1:])
             if do_record:
                 record(command)
-                save_world()
+                if time.time() > io_db["save_wait"] + 15:
+                    save_world()
+                    io_db["save_wait"] = time.time()
             io_db["worldstate_updateable"] = world_db["WORLD_ACTIVE"]
     elif 0 != len(tokens):
         print("Invalid command/argument, or bad number of tokens.")
@@ -1095,6 +1099,7 @@ def command_ping():
 
 def command_quit():
     """Abort server process."""
+    save_world()
     raise SystemExit("received QUIT command")
 
 
-- 
2.30.2