home · contact · privacy
Add blink screen on trivial errors instead of log messages.
[plomrogue2-experiments] / new2 / plomrogue / io.py
index d740f8c42972879e9f911d21ba5edf5e6d9c1e84..908d7bf504b7c304c937729b1bb5cccb3f47538b 100644 (file)
@@ -4,11 +4,12 @@ import queue
 
 class GameIO():
 
-    def __init__(self, game):
+    def __init__(self, game, save_file='savefile'):
         from plomrogue.parser import Parser
         self.clients = {}
         self.parser = Parser(game)
         self.game = game
+        self.save_file = save_file
 
     def loop(self, q):
         """Handle commands coming through queue q, run game, send results back."""
@@ -44,10 +45,15 @@ class GameIO():
             print('Killing server')
             self.server.server_close()
 
-    def handle_input(self, input_, connection_id=None):
-        """Process input_ to command grammar, call command handler if found."""
+    def handle_input(self, input_, connection_id=None, god_mode=False):
+        """Process input_ to command grammar, call command handler if found.
+
+        Command handlers that have no connectin_i argument in their
+        signature will only be called if god_mode is set.
+
+        """
         from inspect import signature
-        from plomrogue.errors import GameError, ArgError
+        from plomrogue.errors import GameError, ArgError, PlayError
         from plomrogue.misc import quote
 
         def answer(connection_id, msg):
@@ -63,13 +69,15 @@ class GameIO():
             else:
                 if 'connection_id' in list(signature(command).parameters):
                     command(*args, connection_id=connection_id)
-                else:
+                elif god_mode:
                     command(*args)
                     #if store and not hasattr(command, 'dont_save'):
                     #    with open(self.game_file_name, 'a') as f:
                     #        f.write(input_ + '\n')
         except ArgError as e:
             answer(connection_id, 'ARGUMENT_ERROR ' + quote(str(e)))
+        except PlayError as e:
+            answer(connection_id, 'PLAY_ERROR ' + quote(str(e)))
         except GameError as e:
             answer(connection_id, 'GAME_ERROR ' + quote(str(e)))