Does one cycle of the listening loop.
        This method is useful if you want to control fbchat from an external event loop

        .. warning::
            `markAlive` parameter is deprecated now, use :func:`fbchat.Client.setActiveStatus`
            or `markAlive` parameter in :func:`fbchat.Client.listen` instead.

        :return: Whether the loop should keep running
        :rtype: bool

def doOneListen(self, markAlive=None):
        """
        Does one cycle of the listening loop.
        This method is useful if you want to control fbchat from an external event loop

        .. warning::
            `markAlive` parameter is deprecated now, use :func:`fbchat.Client.setActiveStatus`
            or `markAlive` parameter in :func:`fbchat.Client.listen` instead.

        :return: Whether the loop should keep running
        :rtype: bool
        """
        if markAlive is not None:
            self._markAlive = markAlive
        try:
            if self._markAlive:
                self._ping()
            content = self._pullMessage()
            if content:
                self._parseMessage(content)
        except KeyboardInterrupt:
            return False
        except requests.Timeout:
            pass
        except requests.ConnectionError:
            # If the client has lost their internet connection, keep trying every 30 seconds
            time.sleep(30)
        except FBchatFacebookError as e:
            # Fix 502 and 503 pull errors
            if e.request_status_code in [502, 503]:
                self.req_url.change_pull_channel()
                self.startListening()
            else:
                raise e
        except Exception as e:
            return self.onListenError(exception=e)

        return True