home · contact · privacy
Minor code re-arrangement.
[plomrogue2-experiments] / server.py
index 0ef44d8e21f62edb8555227694175caf5ddb65f5..8a9d0578b210199c930f84d2484d4c236a697d4d 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -172,6 +172,17 @@ class CommandHandler:
         self.pool = Pool()
         self.pool_result = None
 
+    def handle_input(self, input_, connection_id):
+        """Process input_ to command grammar, call command handler if found."""
+        try:
+            command = self.parser.parse(input_)
+            if command is None:
+                self.send_to(connection_id, 'UNHANDLED INPUT')
+            else:
+                command(connection_id=connection_id)
+        except ArgError as e:
+            self.send_to(connection_id, 'ARGUMENT ERROR: ' + str(e))
+
     def send_to(self, connection_id, msg):
         """Send msg to client of connection_id."""
         self.queues_out[connection_id].put(msg)
@@ -196,6 +207,15 @@ class CommandHandler:
         quoted += ['"']
         return ''.join(quoted)
 
+    def send_all_gamestate(self):
+        """Send out game state data relevant to clients."""
+        self.send_all('NEW_TURN ' + str(self.world.turn))
+        self.send_all('MAP_SIZE ' + self.stringify_yx(self.world.map_size))
+        self.send_all('TERRAIN\n' + self.quoted(self.world.map_))
+        for thing in self.world.things:
+            self.send_all('THING TYPE:' + thing.type + ' '
+                          + self.stringify_yx(thing.position))
+
     def proceed_to_next_player_turn(self, connection_id):
         """Run game world turns until player can decide their next step.
 
@@ -218,12 +238,35 @@ class CommandHandler:
             self.world.player.proceed(is_AI=False)
             if self.world.player.task is None:
                 break
-        self.send_all('NEW_TURN ' + str(self.world.turn))
-        self.send_all('MAP_SIZE ' + self.stringify_yx(self.world.map_size))
-        self.send_all('TERRAIN\n' + self.quoted(self.world.map_))
-        for thing in self.world.things:
-            self.send_all('THING TYPE:' + thing.type + ' '
-                          + self.stringify_yx(thing.position))
+        self.send_all_gamestate()
+
+    def cmd_MOVE(self, direction, connection_id):
+        """Set player task to 'move' with direction arg, finish player turn."""
+        if direction not in {'UP', 'DOWN', 'RIGHT', 'LEFT'}:
+            raise ArgError('Move argument must be one of: '
+                           'UP, DOWN, RIGHT, LEFT')
+        self.world.player.set_task('move', direction=direction)
+        self.proceed_to_next_player_turn(connection_id)
+    cmd_MOVE.argtypes = 'string'
+
+    def cmd_WAIT(self, connection_id):
+        """Set player task to 'wait', finish player turn."""
+        self.world.player.set_task('wait')
+        self.proceed_to_next_player_turn(connection_id)
+
+    def cmd_GET_TURN(self, connection_id):
+        """Send world.turn to caller."""
+        self.send_to(connection_id, str(self.world.turn))
+
+    def cmd_ECHO(self, msg, connection_id):
+        """Send msg to caller."""
+        self.send_to(connection_id, msg)
+    cmd_ECHO.argtypes = 'string'
+
+    def cmd_ALL(self, msg, connection_id):
+        """Send msg to all clients."""
+        self.send_all(msg)
+    cmd_ALL.argtypes = 'string'
 
     def cmd_FIB(self, numbers, connection_id):
         """Reply with n-th Fibonacci numbers, n taken from tokens[1:].
@@ -257,53 +300,9 @@ class CommandHandler:
         self.send_all('TURN_FINISHED ' + str(self.world.turn))
         sleep(1)
         self.world.turn += 1
-        self.send_all('NEW_TURN ' + str(self.world.turn))
-        self.send_all('MAP_SIZE ' + self.stringify_yx(self.world.map_size))
-        self.send_all('TERRAIN\n' + self.quoted(self.world.map_))
-        for thing in self.world.things:
-            self.send_all('THING TYPE:' + thing.type + ' '
-                          + self.stringify_yx(thing.position))
+        self.send_all_gamestate()
         self.pool_result = self.pool.map_async(fib, (35, 35))
 
-    def cmd_GET_TURN(self, connection_id):
-        """Send world.turn to caller."""
-        self.send_to(connection_id, str(self.world.turn))
-
-    def cmd_MOVE(self, direction, connection_id):
-        """Set player task to 'move' with direction arg, finish player turn."""
-        if direction not in {'UP', 'DOWN', 'RIGHT', 'LEFT'}:
-            raise ArgError('Move argument must be one of: '
-                           'UP, DOWN, RIGHT, LEFT')
-        self.world.player.set_task('move', direction=direction)
-        self.proceed_to_next_player_turn(connection_id)
-    cmd_MOVE.argtypes = 'string'
-
-    def cmd_WAIT(self, connection_id):
-        """Set player task to 'wait', finish player turn."""
-        self.world.player.set_task('wait')
-        self.proceed_to_next_player_turn(connection_id)
-
-    def cmd_ECHO(self, msg, connection_id):
-        """Send msg to caller."""
-        self.send_to(connection_id, msg)
-    cmd_ECHO.argtypes = 'string'
-
-    def cmd_ALL(self, msg, connection_id):
-        """Send msg to all clients."""
-        self.send_all(msg)
-    cmd_ALL.argtypes = 'string'
-
-    def handle_input(self, input_, connection_id):
-        """Process input_ to command grammar, call command handler if found."""
-        try:
-            command = self.parser.parse(input_)
-            if command is None:
-                self.send_to(connection_id, 'UNHANDLED INPUT')
-            else:
-                command(connection_id=connection_id)
-        except ArgError as e:
-            self.send_to(connection_id, 'ARGUMENT ERROR: ' + str(e))
-
 
 def io_loop(q):
     """Handle commands coming through queue q, send results back.