"""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:
- 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()
The game loop works sequentially through game commands received
via self.queue from connected servers' clients."""
+
self.queue = queue.Queue()
c = threading.Thread(target=self.loop, args=(self.queue,))
c.start()