Пример #1
0
    def on_connected(self, headers, body):
        """
        Once the connection is established, and 'heart-beat' is found in the headers, we calculate the real heartbeat numbers
        (based on what the server sent and what was specified by the client) - if the heartbeats are not 0, we start up the
        heartbeat loop accordingly.
        """
        self.received_heartbeat = time.time()
        if 'heart-beat' in headers.keys():
            self.heartbeats = utils.calculate_heartbeats(headers['heart-beat'].replace(' ', '').split(','),
                                                         self.heartbeats)
            if self.heartbeats != (0, 0):
                self.send_sleep = self.heartbeats[0] / 1000

                # receive gets an additional threshold of 2 additional seconds
                self.receive_sleep = (self.heartbeats[1] / 1000) + 2

                if self.send_sleep == 0:
                    self.sleep_time = self.receive_sleep
                elif self.receive_sleep == 0:
                    self.sleep_time = self.send_sleep
                else:
                    # sleep is the GCD of the send and receive times
                    self.sleep_time = gcd(self.send_sleep, self.receive_sleep) / 2.0

                self.running = True
                if self.heartbeat_thread is None:
                    self.heartbeat_thread = utils.default_create_thread(self.__heartbeat_loop)
Пример #2
0
    def on_connected(self, headers, body):
        """
        Once the connection is established, and 'heart-beat' is found in the headers, we calculate the real heartbeat numbers
        (based on what the server sent and what was specified by the client) - if the heartbeats are not 0, we start up the
        heartbeat loop accordingly.
        """
        self.received_heartbeat = time.time()
        if 'heart-beat' in headers.keys():
            self.heartbeats = utils.calculate_heartbeats(
                headers['heart-beat'].replace(' ', '').split(','),
                self.heartbeats)
            if self.heartbeats != (0, 0):
                self.send_sleep = self.heartbeats[0] / 1000

                # receive gets an additional threshold of 2 additional seconds
                self.receive_sleep = (self.heartbeats[1] / 1000) + 2

                if self.send_sleep == 0:
                    self.sleep_time = self.receive_sleep
                elif self.receive_sleep == 0:
                    self.sleep_time = self.send_sleep
                else:
                    # sleep is the GCD of the send and receive times
                    self.sleep_time = gcd(self.send_sleep,
                                          self.receive_sleep) / 2.0

                self.running = True
                if self.heartbeat_thread is None:
                    self.heartbeat_thread = utils.default_create_thread(
                        self.__heartbeat_loop)
Пример #3
0
    def __notify(self, frame_type, headers=None, body=None):
        """
        Utility function for notifying listeners of incoming and outgoing messages
        
        \param frame_type
            the type of message
        
        \param headers
            the map of headers associated with the message
        
        \param body
            the content of the message
        """
        if frame_type == 'receipt':
            # logic for wait-on-receipt notification
            self.__send_wait_condition.acquire()
            self.__send_wait_condition.notify()
            self.__send_wait_condition.release()

            receipt = headers['receipt-id']
            self.__receipts[receipt] = None

            # received a stomp 1.1 disconnect receipt
            if receipt == self.__disconnect_receipt:
                self.disconnect_socket()

        if frame_type == 'connected':
            self.connected = True
            self.__connect_wait_condition.acquire()
            self.__connect_wait_condition.notify()
            self.__connect_wait_condition.release()
            if 'version' not in headers.keys():
                if self.version >= 1.1:
                    log.warn('Downgraded STOMP protocol version to 1.0')
                self.version = 1.0
            if 'heart-beat' in headers.keys():
                self.heartbeats = utils.calculate_heartbeats(
                    headers['heart-beat'].replace(' ', '').split(','),
                    self.heartbeats)
                if self.heartbeats != (0, 0):
                    default_create_thread(self.__heartbeat_loop)

        for listener in self.__listeners.values():
            if not listener: continue
            if not hasattr(listener, 'on_%s' % frame_type):
                log.debug('listener %s has no method on_%s' %
                          (listener, frame_type))
                continue

            if frame_type == 'connecting':
                listener.on_connecting(self.__current_host_and_port)
                continue
            elif frame_type == 'disconnected':
                self.connected = False
                listener.on_disconnected()
                continue

            notify_func = getattr(listener, 'on_%s' % frame_type)
            notify_func(headers, body)
Пример #4
0
    def __notify(self, frame_type, headers=None, body=None):
        """
        Utility function for notifying listeners of incoming and outgoing messages
        
        \param frame_type
            the type of message
        
        \param headers
            the map of headers associated with the message
        
        \param body
            the content of the message
        """
        if frame_type == 'receipt':
            # logic for wait-on-receipt notification
            self.__send_wait_condition.acquire()
            self.__send_wait_condition.notify()
            self.__send_wait_condition.release()
            
            receipt = headers['receipt-id']
            self.__receipts[receipt] = None

            # received a stomp 1.1 disconnect receipt
            if receipt == self.__disconnect_receipt:
                self.disconnect_socket()

        if frame_type == 'connected':
            self.connected = True
            self.__connect_wait_condition.acquire()
            self.__connect_wait_condition.notify()
            self.__connect_wait_condition.release()
            if 'version' not in headers.keys():
                if self.version >= 1.1:
                    log.warn('Downgraded STOMP protocol version to 1.0')
                self.version = 1.0
            if 'heart-beat' in headers.keys():
                self.heartbeats = utils.calculate_heartbeats(headers['heart-beat'].replace(' ', '').split(','), self.heartbeats)
                if self.heartbeats != (0,0):
                    default_create_thread(self.__heartbeat_loop)

        for listener in self.__listeners.values():
            if not listener: continue
            if not hasattr(listener, 'on_%s' % frame_type):
                log.debug('listener %s has no method on_%s' % (listener, frame_type))
                continue

            if frame_type == 'connecting':
                listener.on_connecting(self.__current_host_and_port)
                continue
            elif frame_type == 'disconnected':
                self.connected = False
                listener.on_disconnected()
                continue

            notify_func = getattr(listener, 'on_%s' % frame_type)
            notify_func(headers, body)
Пример #5
0
 def on_connected(self, headers, body):
     """
     Once the connection is established, and 'heart-beat' is found in the headers, we calculate the real heartbeat numbers
     (based on what the server sent and what was specified by the client) - if the heartbeats are not 0, we start up the
     heartbeat loop accordingly.
     """
     if 'heart-beat' in headers.keys():
         self.heartbeats = utils.calculate_heartbeats(headers['heart-beat'].replace(' ', '').split(','), self.heartbeats)
         if self.heartbeats != (0,0):
             utils.default_create_thread(self.__heartbeat_loop)
Пример #6
0
 def on_connected(self, headers, body):
     if 'heart-beat' in headers.keys():
         self.heartbeats = utils.calculate_heartbeats(headers['heart-beat'].replace(' ', '').split(','), self.heartbeats)
         if self.heartbeats != (0,0):
             utils.default_create_thread(self.__heartbeat_loop)