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)
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)
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)
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)
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)
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)