+ def run_loop_with_server(self):
+ """Run connection of server talking to clients and game IO loop.
+
+ We have the TCP server (an instance of Server) and we have the
+ game IO loop, a thread running self.loop. Both communicate with
+ each other via a queue.Queue. While the TCP server may spawn
+ parallel threads to many clients, the IO loop works sequentially
+ through game commands received from the TCP server's threads (=
+ client connections to the TCP server). A processed command may
+ trigger messages to the commanding client or to all clients,
+ delivered from the IO loop to the TCP server via the queue.
+
+ """
+ q = queue.Queue()
+ c = threading.Thread(target=self.loop, daemon=True, args=(q,))
+ c.start()
+ server = Server(q, 5000)
+ try:
+ server.serve_forever()
+ except KeyboardInterrupt:
+ pass
+ finally:
+ print('Killing server')
+ server.server_close()
+