home · contact · privacy
Allow serving different protocols on different ports at the same time.
[plomrogue2-experiments] / new2 / plomrogue / game.py
index e7a4262df8bffd7b44e3ba7639cefa276b545573..d90aa0b0f8a47350536244d7f3fab39ffdb01fce 100755 (executable)
@@ -1,6 +1,6 @@
 from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE,
                              Task_FLATTEN_SURROUNDINGS)
-from plomrogue.errors import GameError
+from plomrogue.errors import GameError, PlayError
 from plomrogue.commands import (cmd_ALL, cmd_LOGIN, cmd_QUERY, cmd_PING,
                                 cmd_TURN, cmd_MAP_LINE, cmd_MAP, cmd_GET_ANNOTATION,
                                 cmd_ANNOTATE, cmd_GET_GAMESTATE)
@@ -94,13 +94,18 @@ class Game(GameBase):
     def run_tick(self):
         to_delete = []
         for connection_id in self.sessions:
-            if not connection_id in self.io.server.clients:
+            connection_id_found = False
+            for server in self.io.servers:
+                if connection_id in server.clients:
+                    connection_id_found = True
+                    break
+            if not connection_id_found:
                 t = self.get_thing(self.sessions[connection_id], create_unfound=False)
                 self.things.remove(t)
                 to_delete += [connection_id]
         for connection_id in to_delete:
             del self.sessions[connection_id]
-            self.changed = True 
+            self.changed = True
         for t in [t for t in self.things]:
             if t in self.things:
                 try:
@@ -109,6 +114,10 @@ class Game(GameBase):
                     for connection_id in [c_id for c_id in self.sessions
                                           if self.sessions[c_id] == t.id_]:
                         self.io.send('GAME_ERROR ' + quote(str(e)), connection_id)
+                except PlayError as e:
+                    for connection_id in [c_id for c_id in self.sessions
+                                          if self.sessions[c_id] == t.id_]:
+                        self.io.send('PLAY_ERROR ' + quote(str(e)), connection_id)
         if self.changed:
             self.turn += 1
             self.send_gamestate()