예제 #1
0
 def new_copy(self):
     """Return a new packet that is a copy of this packet with
     a new id and with a fresh status
     """
     packet = Packet.from_dict(self.as_dict())
     packet.id = shared_utils.generate_event_id(self.receiver_id)
     return packet
예제 #2
0
 def send_message(self,
                  receiver_id,
                  assignment_id,
                  data,
                  blocking=True,
                  ack_func=None):
     """Send a message through the socket manager,
     update conversation state
     """
     data['type'] = data_model.MESSAGE_TYPE_MESSAGE
     # Force messages to have a unique ID
     if 'message_id' not in data:
         data['message_id'] = str(uuid.uuid4())
     event_id = generate_event_id(receiver_id)
     packet = Packet(event_id,
                     Packet.TYPE_MESSAGE,
                     self.socket_manager.get_my_sender_id(),
                     receiver_id,
                     assignment_id,
                     data,
                     blocking=blocking,
                     ack_func=ack_func)
     # Push outgoing message to the message thread to be able to resend
     # on a reconnect event
     assignment = self.worker_state[receiver_id].assignments[assignment_id]
     assignment.messages.append(packet.data)
     self.socket_manager.queue_packet(packet)
예제 #3
0
    def send_command(self,
                     receiver_id,
                     assignment_id,
                     data,
                     blocking=True,
                     ack_func=None):
        """Sends a command through the socket manager,
        update conversation state
        """
        data['type'] = data_model.MESSAGE_TYPE_COMMAND
        event_id = generate_event_id(receiver_id)
        packet = Packet(event_id,
                        Packet.TYPE_MESSAGE,
                        self.socket_manager.get_my_sender_id(),
                        receiver_id,
                        assignment_id,
                        data,
                        blocking=blocking,
                        ack_func=ack_func)

        if (data['text'] != data_model.COMMAND_CHANGE_CONVERSATION
                and data['text'] != data_model.COMMAND_RESTORE_STATE and
                assignment_id in self.worker_state[receiver_id].assignments):
            # Append last command, as it might be necessary to restore state
            assign = self.worker_state[receiver_id].assignments[assignment_id]
            assign.last_command = packet.data

        self.socket_manager.queue_packet(packet)
예제 #4
0
 def new_copy(self):
     """Return a new packet that is a copy of this packet with
     a new id and with a fresh status
     """
     packet = Packet.from_dict(self.as_dict())
     packet.id = generate_event_id(self.receiver_id)
     return packet
예제 #5
0
    def send_message(self, receiver_id, assignment_id, data,
                     blocking=True, ack_func=None):
        """Send a message through the socket manager,
        update conversation state
        """
        data['type'] = data_model.MESSAGE_TYPE_MESSAGE
        # Force messages to have a unique ID
        if 'message_id' not in data:
            data['message_id'] = str(uuid.uuid4())
        event_id = shared_utils.generate_event_id(receiver_id)
        packet = Packet(
            event_id,
            Packet.TYPE_MESSAGE,
            self.socket_manager.get_my_sender_id(),
            receiver_id,
            assignment_id,
            data,
            blocking=blocking,
            ack_func=ack_func
        )

        shared_utils.print_and_log(
            logging.INFO,
            'Manager sending: {}'.format(packet),
            should_print=self.opt['verbose']
        )
        # Push outgoing message to the message thread to be able to resend
        # on a reconnect event
        agent = self._get_agent(receiver_id, assignment_id)
        if agent is not None:
            agent.state.messages.append(packet.data)
        self.socket_manager.queue_packet(packet)
예제 #6
0
    def send_command(self, receiver_id, assignment_id, data, blocking=True,
                     ack_func=None):
        """Sends a command through the socket manager,
        update conversation state
        """
        data['type'] = data_model.MESSAGE_TYPE_COMMAND
        event_id = shared_utils.generate_event_id(receiver_id)
        packet = Packet(
            event_id,
            Packet.TYPE_MESSAGE,
            self.socket_manager.get_my_sender_id(),
            receiver_id,
            assignment_id,
            data,
            blocking=blocking,
            ack_func=ack_func
        )

        agent = self._get_agent(receiver_id, assignment_id)
        if (data['text'] != data_model.COMMAND_CHANGE_CONVERSATION and
            data['text'] != data_model.COMMAND_RESTORE_STATE and
            agent is not None):
            # Append last command, as it might be necessary to restore state
            agent.state.last_command = packet.data

        self.socket_manager.queue_packet(packet)
예제 #7
0
    def send_message(self, receiver_id, assignment_id, data,
                     blocking=True, ack_func=None):
        """Send a message through the socket manager,
        update conversation state
        """
        data['type'] = data_model.MESSAGE_TYPE_MESSAGE
        # Force messages to have a unique ID
        if 'message_id' not in data:
            data['message_id'] = str(uuid.uuid4())
        event_id = shared_utils.generate_event_id(receiver_id)
        packet = Packet(
            event_id,
            Packet.TYPE_MESSAGE,
            self.socket_manager.get_my_sender_id(),
            receiver_id,
            assignment_id,
            data,
            blocking=blocking,
            ack_func=ack_func
        )

        shared_utils.print_and_log(
            logging.INFO,
            'Manager sending: {}'.format(packet),
            should_print=self.opt['verbose']
        )
        # Push outgoing message to the message thread to be able to resend
        # on a reconnect event
        agent = self._get_agent(receiver_id, assignment_id)
        if agent is not None:
            agent.state.messages.append(packet.data)
        self.socket_manager.queue_packet(packet)
예제 #8
0
    def send_message(self,
                     receiver_id,
                     assignment_id,
                     data,
                     blocking=True,
                     ack_func=None):
        """'Send' a message directly by updating the queue of messages not
        yet recieved that the agent can pull from
        """
        data = data.copy()  # Ensure data packet is sent in current state
        data['type'] = data_model.MESSAGE_TYPE_MESSAGE
        # Force messages to have a unique ID
        if 'message_id' not in data:
            data['message_id'] = str(uuid.uuid4())
        conversation_id = None
        agent = self.id_to_agent[receiver_id]
        conversation_id = agent.conversation_id
        event_id = shared_utils.generate_event_id(receiver_id)
        packet = Packet(event_id,
                        Packet.TYPE_MESSAGE,
                        'world',
                        receiver_id,
                        assignment_id,
                        data,
                        conversation_id=conversation_id,
                        blocking=blocking,
                        ack_func=ack_func)

        shared_utils.print_and_log(logging.INFO,
                                   'Manager sending: {}'.format(packet),
                                   should_print=self.opt['verbose'])
        # Push message to restore queue and incoming queue
        agent.append_message(packet.data)
        agent.unread_messages.append(packet)
        return data['message_id']
예제 #9
0
 def new_copy(self):
     """Return a new packet that is a copy of this packet with
     a new id and with a fresh status
     """
     packet = Packet.from_dict(self.as_dict())
     packet.id = shared_utils.generate_event_id(self.receiver_id)
     packet.blocking = self.blocking
     packet.requires_ack = self.requires_ack
     return packet