<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def listener(self):
 """ Listener task for receiving ops from Lavalink. """

        while self._ws.open and self._is_shutdown is False:
            try:
                data = json.loads(await self._ws.recv())
            except websockets.ConnectionClosed:
                break

            raw_op = data.get("op")
            try:
                op = LavalinkIncomingOp(raw_op)
            except ValueError:
                socket_log.debug("Received unknown op: %s", data)
            else:
                socket_log.debug("Received known op: %s", data)
                self.loop.create_task(self._handle_op(op, data))

        self.ready.clear()
        log.debug("Listener exited: ws %s SHUTDOWN %s.", self._ws.open, self._is_shutdown)
        self.loop.create_task(self._reconnect())