home · contact · privacy
Remove unnecessary looping.
[plomrogue2] / plomrogue / io.py
index 252fac18d3c3fba5a5f6308f535e165746f20b7d..8cba18d7a483664047b3601890fec3df2c4490a9 100644 (file)
@@ -17,19 +17,22 @@ class GameIO():
         """Handle commands coming through queue q, run game, send results back.
 
         As basic flood protection, Only accepts one command per connection per
         """Handle commands coming through queue q, run game, send results back.
 
         As basic flood protection, Only accepts one command per connection per
-        1/100 of a second.
+        1/100 of a second (currently commented out).
 
         """
         import time
         potential_flooders = {}
         while True:
             try:
 
         """
         import time
         potential_flooders = {}
         while True:
             try:
-                command, connection_id = q.get(timeout=0.001)
-                if connection_id in potential_flooders:
-                    if int(time.time() * 100) == potential_flooders[connection_id]:
-                        continue
-                potential_flooders[connection_id] = int(time.time() * 100)
-                self.handle_input(connection_id, command)
+                connection_id, command = q.get(timeout=0.001)
+
+                # FIXME: this would catch the init command flood
+                #if connection_id in potential_flooders:
+                #    if int(time.time() * 100) == potential_flooders[connection_id]:
+                #        continue
+                #potential_flooders[connection_id] = int(time.time() * 100)
+
+                self.handle_input(command, connection_id)
             except queue.Empty:
                 self.game.run_tick()
 
             except queue.Empty:
                 self.game.run_tick()
 
@@ -38,8 +41,20 @@ class GameIO():
 
         The game loop works sequentially through game commands received
         via self.queue from connected servers' clients."""
 
         The game loop works sequentially through game commands received
         via self.queue from connected servers' clients."""
+
         self.queue = queue.Queue()
         self.queue = queue.Queue()
+
+        # optionally use this for main thread profiling:
+        # import cProfile
+        # class ProfiledThread(threading.Thread):
+        #     def run(self):
+        #         profiler = cProfile.Profile()
+        #         profiler.runcall(threading.Thread.run, self)
+        #         print('profiled thread finished')
+        #         profiler.dump_stats('profile')
+        # c = ProfiledThread(target=self.loop, args=(self.queue,))
         c = threading.Thread(target=self.loop, args=(self.queue,))
         c = threading.Thread(target=self.loop, args=(self.queue,))
+
         c.start()
 
     def start_server(self, port, server_class, certfile=None, keyfile=None):
         c.start()
 
     def start_server(self, port, server_class, certfile=None, keyfile=None):