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