X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomrogue%2Fio.py;h=438b8b6e1301e4da584127382629791ce87756b6;hb=253f4ce3544c6e9982ba5296c4b28f5fc1888db5;hp=8110647647b1a809692949220135cf7eb9c4679d;hpb=fd98b77dfea09c0481b0e8be1204b6439eea80da;p=plomrogue2 diff --git a/plomrogue/io.py b/plomrogue/io.py index 8110647..438b8b6 100644 --- a/plomrogue/io.py +++ b/plomrogue/io.py @@ -16,8 +16,8 @@ class GameIO(): def loop(self, q): """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 (currently commented out). + As basic flood protection, only accepts ten commands per connection per + 1/10 of a second. """ import time @@ -25,13 +25,14 @@ class GameIO(): while True: try: 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) - + now = int(time.time() * 10) + if connection_id in potential_flooders and \ + potential_flooders[connection_id][0] == now: + if potential_flooders[connection_id][1] > 10: + continue + potential_flooders[connection_id][1] += 1 + else: + potential_flooders[connection_id] = [now, 1] self.handle_input(command, connection_id) except queue.Empty: self.game.run_tick() @@ -43,7 +44,18 @@ class GameIO(): via self.queue from connected servers' clients.""" 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.start() def start_server(self, port, server_class, certfile=None, keyfile=None):