def process_outgoing_messsages(self, message: Message): """Process only the outgoing messages""" # Check sender is not in list of destroyed threads if len(message.sender) > 1: # Append name to front of sender and pass up message.sender = [self.owner, *message.sender] self.output_queue.put(message) else: self.logger.error( f"Sender {message.sender} does not have enough information")
def _message_handle(self, message: Message): """Takes a slightly different approach to messages as it needs to handle different situations""" # Run garbage collection self.garbage_collect() self.logger.debug( f"MESSAGE Sender: {message.sender}, Command {message.command}, Package: {message.package}" ) # Addressed to self if message.receiver == [self.name]: # Process as normal super()._message_handle(message) # Addressed to child thread elif self.name in message.receiver: # Strip name off front and pass on message.receiver = message.receiver[1:] # Send to appropriate thread input queue if message.receiver[0] in self.active_threads.keys(): self.active_threads[message.receiver[0]].input_queue.put( message) else: # Check sender is not in list of destroyed threads if len(message.sender) > 1: if message.sender[1] not in self.destroyed_threads: # Append name to front of sender and pass up message.sender = [self.owner, *message.sender] self.output_queue.put(message) else: self.logger.error( f"Sender {message.sender[1]} is a destroyed thread") else: self.logger.error( f"Sender {message.sender} does not have enough information" ) # Run garbage collection self.garbage_collect()