Example #1
0
    def connectionLost(self, reason):
        """Este método executa qualquer coisa quando uma conexão é perdida

        :param reason: Identifica o problema na perda de conexão
        """
        if self.message is not None:
            message = PeerProtocol.connectionLost(self, reason)

            # envia mensagem recebida para o AMS

            # montagem da mensagem a ser enviada ao AMS
            _message = ACLMessage(ACLMessage.INFORM)
            ams_aid = AID(name='AMS@' + self.fact.ams['name'] + ':' +
                          str(self.fact.ams['port']))
            _message.add_receiver(ams_aid)
            _message.set_sender(self.fact.aid)
            _message.set_content(dumps({'ref': 'MESSAGE', 'message': message}))
            # fim da montagem da mensagem

            # armazenamento da mensagem para envio
            self.fact.messages.append((ams_aid, _message))

            # estabelecimento de conexão com AMS
            reactor.connectTCP(self.fact.ams['name'],
                               int(self.fact.ams['port']), self.fact)

            # execução do comportamento Agent.react à mensagem
            # recebida
            self.message = None
            self.fact.react(message)
Example #2
0
    def handle_identif(self, aid):
        """
            handle_identif
            --------------

            Este método é utilizado para cadastrar o agente que esta se identificando
            na tabela de agentes ativos.
        """
        if aid.name in self.factory.table:
            display_message(
                'AMS', 'Falha na Identificacao do agente ' + aid.name)

            # prepara mensagem de resposta
            message = ACLMessage(ACLMessage.REFUSE)
            message.set_sender(self.factory.aid)
            message.add_receiver(aid)
            message.set_content(
                'Ja existe um agente com este identificador. Por favor, escolha outro.')
            # envia mensagem
            self.sendLine(message.get_message())
            return
        self.aid = aid
        self.factory.table[self.aid.name] = self.aid
        display_message(
            'AMS', 'Agente ' + aid.name + ' identificado com sucesso')

        # prepara mensagem de resposta
        message = ACLMessage(ACLMessage.INFORM)
        message.set_sender(self.factory.aid)
        for receiver in self.factory.table.values():
            message.add_receiver(receiver)

        message.set_content(dumps(self.factory.table))
        self.broadcast_message(message)
Example #3
0
    def connectionMade(self):
        """Este método é executado sempre que uma
        conexão é executada entre um agente no modo
        cliente e um agente no modo servidor
        """

        # fase 1 de identificação do agente com o AMS
        if self.fact.state == 'IDENT1':
            # cria a mensagem de registro no AMS
            msg = ACLMessage()
            msg.add_receiver(
                AID(name='AMS@' + self.fact.ams['name'] + ':' +
                    str(self.fact.ams['port'])))
            msg.set_sender(self.fact.aid)
            msg.set_performative(ACLMessage.INFORM)
            msg.set_content(dumps({'ref': 'IDENT', 'aid': self.fact.aid}))

            # envia a mensagem ao AMS e atualiza a flag de identificação para a
            # fase 2
            self.fact.state = 'IDENT2'
            self.send_message(msg.get_message())
        # se não é a fase de identificação 1 então o agente tenta enviar as mensagens presentes
        # na fila de envio representada pela variável self.fact.messages
        else:
            # captura o host conectado ao agente por meio do metodo
            # self.transport.getPeer()
            PeerProtocol.connectionMade(self)
Example #4
0
    def connectionMade(self):
        """Este método é executado sempre que uma
        conexão é executada entre um agente no modo
        cliente e um agente no modo servidor
        """

        # fase 1 de identificação do agente com o AMS
        if self.fact.state == 'IDENT1':
            # cria a mensagem de registro no AMS
            msg = ACLMessage()
            msg.add_receiver(
                AID(
                    name='AMS' + '@' + self.fact.ams['name'] +
                    ':' + str(self.fact.ams['port'])
                ))
            msg.set_sender(self.fact.aid)
            msg.set_performative(ACLMessage.INFORM)
            msg.set_content(dumps(self.fact.aid))

            # envia a mensagem ao AMS e atualiza a flag de identificação para a
            # fase 2
            self.fact.state = 'IDENT2'
            self.send_message(msg.get_message())
        # se não é a fase de identificação 1 então o agente tenta enviar as mensagens presentes
        # na fila de envio representada pela variável self.fact.messages
        else:
            # captura o host conectado ao agente por meio do metodo
            # self.transport.getPeer()
            PeerProtocol.connectionMade(self)
Example #5
0
    def handle_identif(self, aid):
        """Este método é utilizado para cadastrar o agente que esta se identificando
            na tabela de agentes ativos.
        """
        if aid.name in self.fact.table:
            display_message(
                'AMS', 'Falha na Identificacao do agente ' + aid.name)

            # prepara mensagem de resposta
            message = ACLMessage(ACLMessage.REFUSE)
            message.set_sender(self.fact.aid)
            message.add_receiver(aid)
            message.set_content(
                'Ja existe um agente com este identificador. Por favor, escolha outro.')
            # envia mensagem
            self.send_message(message.get_message())
            return
        self.aid = aid
        self.fact.table[self.aid.name] = self.aid
        display_message(
            'AMS', 'Agente ' + aid.name + ' identificado com sucesso')

        # prepara mensagem de resposta
        message = ACLMessage(ACLMessage.INFORM)
        message.set_sender(self.fact.aid)
        for receiver in self.fact.table.values():
            message.add_receiver(receiver)

        message.set_content(dumps(self.fact.table))
        self.fact.broadcast_message(message)
Example #6
0
    def connectionMade(self):
        """
            Este método é executado sempre que uma conexão é executada entre 
            um cliente e um servidor
        """

        # fase de identificação do agente com o AMS
        if self.factory.state == 'IDENT':
            # cria a mensagem de registro no AMS
            msg = ACLMessage()
            msg.add_receiver(
                AID(name='AMS' + '@' + self.factory.ams['name'] + ':' + str(self.factory.ams['port'])))
            msg.set_sender(self.factory.aid)
            msg.set_performative(ACLMessage.INFORM)
            msg.set_content(dumps(self.factory.aid))

            # envia a mensagem ao AMS
            self.factory.state = 'READY'
            self.sendLine(msg.get_message())
            self.transport.loseConnection()
        else:
            peer = self.transport.getPeer()
            for message in self.factory.messages:
                if int(message[0].port) == int(peer.port):
                    self.sendLine(message[1].get_message())
                    self.factory.messages.remove(message)
                    self.transport.loseConnection()
                    break
Example #7
0
    def connectionMade(self):
        """
            Este método é executado sempre que uma conexão é executada entre
            um cliente e um servidor
        """

        # fase de identificação do agente com o AMS
        if self.fact.state == 'IDENT':
            # cria a mensagem de registro no AMS
            msg = ACLMessage()
            msg.add_receiver(
                AID(name='AMS' + '@' + self.fact.ams['name'] + ':' +
                    str(self.fact.ams['port'])))
            msg.set_sender(self.fact.aid)
            msg.set_performative(ACLMessage.INFORM)
            msg.set_content(dumps(self.fact.aid))

            # envia a mensagem ao AMS
            self.fact.state = 'READY'
            self.sendLine(msg.get_message())
            self.transport.loseConnection()
            display_message(self.fact.aid.localname,
                            "Mensagem de autenticacao enviada")
        else:
            PeerProtocol.connectionMade(self)
Example #8
0
 def clientConnectionFailed(self, connector, reason):
     for name, aid in self.table.iteritems():
         if aid.port == connector.port:
             display_message(self.aid.name,
                             'O agente ' + aid.name + ' esta desconectado.')
             self.table.pop(name)
             message = ACLMessage(ACLMessage.INFORM)
             message.set_sender(self.aid)
             message.set_content(dumps(self.table))
             self.protocol.broadcast_message(message)
             break
Example #9
0
    def onItemChanged(self, current, previous):
        for name, aid in self.table.iteritems():
            if name in current.text() and not ('Sniffer' in name):
                message = ACLMessage(ACLMessage.REQUEST)
                message.set_sender(self.aid)
                message.add_receiver(aid)
                message.set_content('Request messages history')

                self.messages.append((aid, message))

                reactor.connectTCP(aid.host, aid.port, self)
                break
Example #10
0
 def clientConnectionFailed(self, connector, reason):
     for name, aid in self.table.iteritems():
         if aid.port == connector.port:
             display_message(
                 self.aid.name, 'O agente ' + aid.name + ' esta desconectado.')
             print reason
             self.table.pop(name)
             message = ACLMessage(ACLMessage.INFORM)
             message.set_sender(self.aid)
             message.set_content(dumps(self.table))
             self.protocol.broadcast_message(message)
             break
Example #11
0
    def onItemChanged(self, current, previous):
        for name, aid in self.table.iteritems():
            if name in current.text() and not ('Sniffer' in name):
                message = ACLMessage(ACLMessage.REQUEST)
                message.set_sender(self.aid)
                message.add_receiver(aid)
                message.set_content('Request messages history')

                self.messages.append((aid, message))

                reactor.connectTCP(aid.host, aid.port, self)
                break
Example #12
0
    def create_message(slave, params):
        content = {
            var.name: var.getter()
            for var in slave.vars.values()
            if var.causality == pade.fmi.Fmi2Causality.input
        }
        content.update(params)

        message = ACLMessage(ACLMessage.FIPA_REQUEST_PROTOCOL)
        message.set_performative(ACLMessage.REQUEST)
        message.set_sender(slave.wrapper_aid)
        message.add_receiver(slave.agent_aid)
        message.set_message_id()
        message.set_conversation_id(str(uuid1()))
        message.set_content(json.dumps(content))
        message.set_datetime_now()

        return pickle.dumps(message)
Example #13
0
    def connectionMade(self):
        """
            Este método é executado sempre que uma conexão é executada entre
            um cliente e um servidor
        """

        # fase de identificação do agente com o AMS
        if self.fact.state == 'IDENT':
            # cria a mensagem de registro no AMS
            msg = ACLMessage()
            msg.add_receiver(
                AID(name='AMS' + '@' + self.fact.ams['name'] + ':' + str(self.fact.ams['port'])))
            msg.set_sender(self.fact.aid)
            msg.set_performative(ACLMessage.INFORM)
            msg.set_content(dumps(self.fact.aid))

            # envia a mensagem ao AMS
            self.fact.state = 'READY'
            self.sendLine(msg.get_message())
            self.transport.loseConnection()
            display_message(self.fact.aid.localname, "Mensagem de autenticacao enviada")
        else:
            PeerProtocol.connectionMade(self)
Example #14
0
    def filter(self, message):
        state = True
        
        if self.conversationID != None and self.conversationID != message.conversationID:
            state = False
        
        if self.sender != None and self.sender != message.sender:
            state = False
        
        if self.performative != None and self.performative != message.performative:
            state = False
        
        if self.protocol != None and self.protocol != message.protocol:
            state = False
            
        return state

if __name__ == '__main__':
    message = ACLMessage(ACLMessage.REQUEST)
    message.set_sender(AID('lucas'))
    message.add_receiver('allana')
    message.set_protocol(ACLMessage.FIPA_REQUEST_PROTOCOL)
    
    filtro = Filter()
    filtro.set_protocol(ACLMessage.FIPA_REQUEST_PROTOCOL)
    
    if filtro.filter(message):
        print message.as_xml()
    else:
        print 'A mensagem foi barrada pelo protocolo'
Example #15
0
            state = False

        if self.performative != None and self.performative != message.performative:
            state = False

        if self.protocol != None and self.protocol != message.protocol:
            state = False

        if self.ontology != None and self.ontology != message.ontology:
            state = False

        if self.language != None and self.language != message.language:
            state = False

        return state


if __name__ == '__main__':
    message = ACLMessage(ACLMessage.REQUEST)
    message.set_sender(AID('john'))
    message.add_receiver('mary')
    message.set_protocol(ACLMessage.FIPA_REQUEST_PROTOCOL)

    filtro = Filter()
    filtro.set_protocol(ACLMessage.FIPA_REQUEST_PROTOCOL)

    if filtro.filter(message):
        print(message.as_xml())
    else:
        print('The message was blocked by the protocol.')
Example #16
0
 def sending_message(self):
     message = ACLMessage(ACLMessage.INFORM)
     message.set_sender(AID('Reconhecedor_Voz'))
     message.add_receiver(AID('Semantizador'))
     message.set_content('Ola')
     self.send(message)