예제 #1
0
    def transmit(self, frame):
        """
        Convert a frame object to a frame string and transmit to the server.

        :param Frame frame: the Frame object to transmit
        """
        with self.__listeners_change_condition:
            listeners = sorted(self.listeners.items())

        for (_, listener) in listeners:
            if not listener:
                continue
            try:
                listener.on_send(frame)
            except AttributeError:
                continue

        if frame.cmd == CMD_DISCONNECT and HDR_RECEIPT in frame.headers:
            self.__disconnect_receipt = frame.headers[HDR_RECEIPT]

        lines = convert_frame(frame)
        packed_frame = pack(lines)

        if logging.isEnabledFor(logging.DEBUG):
            logging.debug("Sending frame: %s", clean_lines(lines))
        else:
            logging.info("Sending frame: %r", frame.cmd or "heartbeat")
        self.send(packed_frame)
예제 #2
0
    def on_error(self, headers, body):
        """
        Increment the error count. See :py:meth:`ConnectionListener.on_error`

        :param dict headers: headers in the message
        :param body: the message content
        """
        if logging.isEnabledFor(logging.DEBUG):
            logging.debug("received an error %s [%s]", body, headers)
        else:
            logging.info("received an error %s", body)
        self.errors += 1
예제 #3
0
 def process_frame(self, f, frame_str):
     """
     :param Frame f: Frame object
     :param bytes frame_str: raw frame content
     """
     frame_type = f.cmd.lower()
     if frame_type in ["connected", "message", "receipt", "error", "heartbeat"]:
         if frame_type == "message":
             self.notify("before_message", f)
         if logging.isEnabledFor(logging.DEBUG):
             logging.debug("Received frame: %r, headers=%r, body=%r", f.cmd, f.headers, f.body)
         else:
             logging.info("Received frame: %r, len(body)=%r", f.cmd, length(f.body))
         self.notify(frame_type, f)
     else:
         logging.warning("Unknown response frame type: '%s' (frame length was %d)", frame_type, length(frame_str))