def on_message(self, ws, message):
     message = json.loads(message)
     print("message received on socket:", message)
     game_json = message["game"]
     game_json["me"] = message["me"]
     game_json["possible_moves"] = [Card.from_str(card) for card in message["possible_moves"] or []]
     self.update_shared_data("type", message["type"])
     self.update_shared_data("data", game_json)
     print(game_json)
     print(GameHandler.get_game_instance().__dict__)
     if message["type"] == "game_start" and not GameHandler.get_game_data().get("is_started", False):
         GameHandler.update_data("is_started", True)
         ws.close()
 def update_shared_data(cls, key, data):
     GameHandler.update_data(key, data)
    def on_close(self, ws):
        print("### closed ###")

    def on_open(self, ws):
        WSHandler.set_ws(ws)
        print(WSHandler.get_ws())
        print("waiting for game to start")


if __name__ == "__main__":
    from main import PattebaazApp
    manager = Manager()
    d = manager.dict()
    game = GameHandler.set_game_data(d)
    websocket.enableTrace(True)
    name = sys.argv[1]
    GameHandler.update_data("name", name)
    socket_handler = SocketHandler()
    ws = websocket.WebSocketApp("ws://127.0.0.1:8081/ws/game/patta/{}/".format(name),
                                on_message=lambda ws, msg: socket_handler.on_message(ws, msg),
                                on_error=lambda ws, msg: socket_handler.on_error(ws, msg),
                                on_close=lambda ws: socket_handler.on_close(ws))
    ws.on_open = lambda ws:socket_handler.on_open(ws)

    p1 = multiprocessing.Process(target=ws.run_forever, args=())
    p1.start()
    p1.join()
    app = PattebaazApp()
    app.run()