class GameApp(object): next_player_id = 0 def __init__(self, *args, **kwargs): self.game = Game(60) self.game_thread = threading.Thread(target=self.game.main) self.game_thread.daemon = True self.game_thread.start() if SINGLE_PLAYER: self.client_thread = threading.Thread(target=basic_client) self.client_thread.daemon = True self.client_thread.start() def __call__(self, environ, start_response): player_id = self.next_player_id self.next_player_id += 1 websocket = environ['wsgi.websocket'] player_connect_message = { 'type': 'player_connect', 'player_id': player_id, 'websocket': websocket, } self.game.on_message(player_connect_message) while True: recv_data = websocket.receive() if recv_data is None: break message = json.loads(recv_data) message['player_id'] = player_id self.game.on_message(message) player_disconnect_message = { 'type': 'player_disconnect', 'player_id': player_id, } self.game.on_message(player_disconnect_message)