<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 _async_listen(self, callback=None):
 """Listen loop."""

        while True:
            if not self._running:
                return

            try:
                packet = await self.get_json(
                    URL_LISTEN.format(self._url), timeout=30, exceptions=True)
            except asyncio.TimeoutError:
                continue
            except aiohttp.client_exceptions.ClientError as exc:
                _LOGGER.warning("ClientError: %s", exc)
                self._sleep_task = self.loop.create_task(asyncio.sleep(30))
                try:
                    await self._sleep_task
                except asyncio.CancelledError:
                    pass
                self._sleep_task = None
                continue

            if isinstance(packet, dict) and QS_CMD in packet:
                _LOGGER.debug("callback( %s )", packet)
                try:
                    callback(packet)
                except Exception as err:  # pylint: disable=broad-except
                    _LOGGER.error("Exception in callback\nType: %s: %s",
                                  type(err), err)
            else:
                _LOGGER.debug("unknown packet? %s", packet)